//Les chiffres sont numérotés de droite à gauche; //Soit x, la somme des chiffres pairs et y la somme des chiffres impairs //Calculons z = x +3*y //Soit m le nombre divisible par 10 immédiatement supérieur à z //La somme de contrôle est : m - z //Exemple : 978020113447 //x = 4 + 3 + 1 + 2 + 8 + 9 = 27 //y = 7 + 4 + 1 + 0 + 0 + 7 = 19 //z = 3 * 19 + 27 = 84 //m = 90 //Somme de contrôle = 90 - 84 = 6 //EAN13 ---> 9 780201 134476 Function (StringVar input) NumberVar checkDigitSubtotal; NumberVar NumberSupModuloTen; StringVar checkDigit;
StringVar temp; //x NumberVar pairs; //y NumberVar impairs; // z NumberVar somme; //m NumberVar NbDivParDix; //cle de controle NumberVar checkDigit_EMIV;
impairs:=Val(input[2]) + Val(input[4]) + Val(input[6]) + Val(input[8]) + Val(input[10])+ Val(input[12]); pairs:=Val(input[1]) + Val(input[3]) + Val(input[5]) + Val(input[7]) + Val(input[9])+ Val(input[11]); somme:=pairs+(3*impairs); NbDivParDix:=somme; while NbDivParDix mod 10 <> 0 do ( NbDivParDix:=NbDivParDix+1 ); //checkDigitSubtotal := 3 * (Val(input[2]) + Val(input[4]) + Val(input[6]) + Val(input[8]) + Val(input[10]) + Val(Right(input, 1))); //checkDigitSubtotal := checkDigitSubtotal + Val(input[1]) + Val(input[3]) + Val(input[5]) + Val(input[7]) + Val(input[9]) + Val(input[11]); //NumberSupModuloTen := checkDigitSubtotal;
//checkDigit := Right(ToText(300 NumberSupModuloTen - checkDigitSubtotal,"#"), 1); checkDigit_EMIV := NbDivParDix - somme; Select input[1] Case "0" : temp := "U|x" + Chr(65 + Val(input[2])) + Chr(65 + Val(input[3])) + Chr(65 + Val(input[4])) + Chr(65 + Val(input[5])) + Chr(65 + Val(input[6])) + Chr(65 + Val(input[7])) Case "1" : temp := "[|x" + Chr(65 + Val(input[2])) + Chr(65 + Val(input[3])) + Chr(75 + Val(input[4])) + Chr(65 + Val(input[5])) + Chr(75 + Val(input[6])) + Chr(75 + Val(input[7])) Case "2" : temp := "V|x" + Chr(65 + Val(input[2])) + Chr(65 + Val(input[3])) + Chr(75 + Val(input[4])) + Chr(75 + Val(input[5])) + Chr(65 + Val(input[6])) + Chr(75 + Val(input[7])) Case "3" : temp := "W|x" + Chr(65 + Val(input[2])) + Chr(65 + Val(input[3])) + Chr(75 + Val(input[4])) + Chr(75 + Val(input[5])) + Chr(75 + Val(input[6])) + Chr(65 + Val(input[7])) Case "4" : temp := "X|x" + Chr(65 + Val(input[2])) + Chr(75 + Val(input[3])) + Chr(65 + Val(input[4])) + Chr(65 + Val(input[5])) + Chr(75 + Val(input[6])) + Chr(75 + Val(input[7])) Case "5" : temp := "Y|x" + Chr(65 + Val(input[2])) + Chr(75 + Val(input[3])) + Chr(75 + Val(input[4])) + Chr(65 + Val(input[5])) + Chr(65 + Val(input[6])) + Chr(75 + Val(input[7])) Case "6" : temp := "Z|x" + Chr(65 + Val(input[2])) + Chr(75 + Val(input[3])) + Chr(75 + Val(input[4])) + Chr(75 + Val(input[5])) + Chr(65 + Val(input[6])) + Chr(65 + Val(input[7])) Case "7" : temp := "u|x" + Chr(65 + Val(input[2])) + Chr(75 + Val(input[3])) + Chr(65 + Val(input[4])) + Chr(75 + Val(input[5])) + Chr(65 + Val(input[6])) + Chr(75 + Val(input[7])) Case "8" : temp := "\|x" + Chr(65 + Val(input[2])) + Chr(75 + Val(input[3])) + Chr(65 + Val(input[4])) + Chr(75 + Val(input[5])) + Chr(75 + Val(input[6])) + Chr(65 + Val(input[7])) Case "9" : temp := "]|x" + Chr(65 + Val(input[2])) + Chr(75 + Val(input[3])) + Chr(75 + Val(input[4])) + Chr(65 + Val(input[5])) + Chr(75 + Val(input[6])) + Chr(65 + Val(input[7])); temp + "y" + Mid(input, 8, 5) + left(totext(checkDigit_EMIV),1) + "z"
|