eddy1975
XLDnaute Occasionnel
Bonjour le forum,
Je cherche à mettre en forme sur une feuille Excel le calcul de la clé (ccc) du numéro RIO, cependant je n'arrive pas à décrypter le principe de calcul suivant :
La clé de contrôle CCC permet de détecter une incompatibilité entre le code RIO et le numéro de téléphone, les erreurs de recopie manuelle étant fréquentes. Cette clé est calculée à partir :
des trois premiers champs du RIO (OO et Q)
du numéro de contrat (RRRRRR)
et du numéro de téléphone à 10 chiffres de l'abonné, noté EZABPQMCDU (ex. : 0611223344).
Le code est calculé de la manière suivante (exemple en python) :
def calculCCC( OO, Q, RRRRRR, EZABPQMCDU): # les paramètres sont de type chaîne, ex : "00"
concatenation = OO + Q + RRRRRR + EZABPQMCDU
ordre = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+" # caractères utilisés pour le codage (37 différents)
a = b = c = 0 # initialisation de a, b et c
for i in range(19): # boucle de 0 à 18, pour chaque index de position dans concatenation
position = ordre.find(concatenation) # on retrouve la position du caractère concatenation dans ordre
a = (1 * a + position) % 37 # calcul du nombre a, "% 37" pour modulo 37
b = (2 * b + position) % 37
c = (4 * c + position) % 37
return ordre[a] + ordre + ordre[c] # on encode a, b et c en leur caractères correspondants, et on concatène le tout
J'ai mis tout l'avancement de mes calculs dans le fichier joint et je bloque.......
Merci pour votre aide.
Je cherche à mettre en forme sur une feuille Excel le calcul de la clé (ccc) du numéro RIO, cependant je n'arrive pas à décrypter le principe de calcul suivant :
La clé de contrôle CCC permet de détecter une incompatibilité entre le code RIO et le numéro de téléphone, les erreurs de recopie manuelle étant fréquentes. Cette clé est calculée à partir :
des trois premiers champs du RIO (OO et Q)
du numéro de contrat (RRRRRR)
et du numéro de téléphone à 10 chiffres de l'abonné, noté EZABPQMCDU (ex. : 0611223344).
Le code est calculé de la manière suivante (exemple en python) :
def calculCCC( OO, Q, RRRRRR, EZABPQMCDU): # les paramètres sont de type chaîne, ex : "00"
concatenation = OO + Q + RRRRRR + EZABPQMCDU
ordre = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+" # caractères utilisés pour le codage (37 différents)
a = b = c = 0 # initialisation de a, b et c
for i in range(19): # boucle de 0 à 18, pour chaque index de position dans concatenation
position = ordre.find(concatenation) # on retrouve la position du caractère concatenation dans ordre
a = (1 * a + position) % 37 # calcul du nombre a, "% 37" pour modulo 37
b = (2 * b + position) % 37
c = (4 * c + position) % 37
return ordre[a] + ordre + ordre[c] # on encode a, b et c en leur caractères correspondants, et on concatène le tout
J'ai mis tout l'avancement de mes calculs dans le fichier joint et je bloque.......
Merci pour votre aide.