PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Code Barre UCPA (12 caractères)
Code Barre UCPA (12 caractères)
Débuté par guest, 26 oct. 2005 16:43 - 3 réponses
Posté le 26 octobre 2005 - 16:43
Bonjour,

Qelqu'un peut-il me donner l'algorithme de contrôle du 12ème caractère sur les codes barre UCPA ou UCPE ?

Merci d'avance pour votre aide .
Posté le 27 octobre 2005 - 08:51
PROCEDURE CalcCleCab(TypCab,ValCab)

Val1 est un entier
Val2 est un entier
Cle est un entier = -1

SELON TypCab
CAS "EAN8"
Val1 = Val(Gauche(ValCab,1)) + Val(Milieu(ValCab,3,1)) + Val(Milieu(ValCab,5,1)) + Val(Milieu(ValCab,7,1))
Val2 = Val(Milieu(ValCab,2,1)) + Val(Milieu(ValCab,4,1)) + Val(Milieu(ValCab,6,1))
Cle = (1000 -(Val1+Val2*3)) modulo 10
CAS "EAN13"
Val1 = Val(Gauche(ValCab,1)) + Val(Milieu(ValCab,3,1)) + Val(Milieu(ValCab,5,1)) + Val(Milieu(ValCab,7,1)) + Val(Milieu(ValCab,9,1)) + Val(Milieu(ValCab,11,1))
Val2 = Val(Milieu(ValCab,2,1)) + Val(Milieu(ValCab,4,1)) + Val(Milieu(ValCab,6,1)) + Val(Milieu(ValCab,8,1)) + Val(Milieu(ValCab,10,1)) + Val(Milieu(ValCab,12,1))
Cle = (1000 -(Val1+Val2*3)) modulo 10
CAS "UPCA"
Val1 = Val(Gauche(ValCab,1)) + Val(Milieu(ValCab,3,1)) + Val(Milieu(ValCab,5,1)) + Val(Milieu(ValCab,7,1)) + Val(Milieu(ValCab,9,1)) + Val(Milieu(ValCab,11,1))
Val2 = Val(Milieu(ValCab,2,1)) + Val(Milieu(ValCab,4,1)) + Val(Milieu(ValCab,6,1)) + Val(Milieu(ValCab,8,1)) + Val(Milieu(ValCab,10,1))
Cle = (1000 -(Val2+Val1*3)) modulo 10
AUTRE CAS
FIN
RENVOYER Cle
Posté le 27 octobre 2005 - 10:57
Merci beaucoup pour l'info.
Posté le 27 octobre 2005 - 11:49
Bon si on faisait un peut plus simple en applicant la régle de calcul du modulo 10
quel que soit la longueur du code, on numérote en partant de la DROITE (valeur 1 pour le modulo que l'on veut calculer) à la GAUCHE (valeur n)...c'est là l'astuce... puis on fait la somme des chiffres de rang pair = Sp et la somme des chiffres de rang impair = Si, puis
St = (Sp*3) + (Si) et enfin le modulo M c'est le chiffre qui ajouté à St fait que le nombre obtenu est divisible par 10.
Exemple sur un EAN13
3 4 5 3 1 2 0 2 3 6 4 5 ?
13 12 11 10 9 8 7 6 5 4 3 2 1
4 + 3 + 2 + 2 + 6 + 5 = 22 Sp
3 + 5 + 1 + 0 + 3 + 4 = 16 Si
St = (3*22)+(Si)‚
82 + 8 est divisible par 10 donc le modulo est 8
et cette méthode fonctionne quel que soit la longueur de code...EAN128 en autre
Traduire ca en wd.... un plaisir

FUNCTION Modulo10(pCode)
i est un entier
nModulo est un entier = 0

FOR i=1 TO Taille(pCode)
IF EstPair(Taille(pCode)-i+2) THEN nModulo += Val(pCode[[i]])*3 ELSE nModulo += Val(pCode[[i]])
END
IF modulo(nModulo,10)=0 THEN RENVOYER 0 ELSE RENVOYER 10-modulo(nModulo,10)

Simple non ?

De plus il est plus rapide d'utiliser vChaine[[nPosition]]
que la fonction Milieu(vChaine,nPosition,1)