VALIDATION D'UN CODE ISIN

VBSorcier Messages postés 102 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 29 avril 2007 - 2 juin 2006 à 23:14
frmerle Messages postés 1 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 24 novembre 2010 - 24 nov. 2010 à 17:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37910-validation-d-un-code-isin

frmerle Messages postés 1 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 24 novembre 2010
24 nov. 2010 à 17:03
Bonjour et merci pour cette fonction, cependant l'algorithme implémenté est incorrect, il fonctionne pour des codes ISIN français mais pas pour certains ISIN étrangers (américains et anglais en particulier) qui comporte des lettres dans la partie "NSIN" (code national= octet 3 à 11).
C'est pour cela que le code US98157D1063 de CASFLA ne fonctionne pas.

Premier point, l'algorithme à la base de ce contrôle est la formule de LUHN (utilisée aussi pour le contrôle des chiffres clés de carte bleue (cf Wikipédia).
Les principale différences sont les suivantes :
- la lecture doit se faire DE DROITE à GAUCHE (du dernier octet au premier) ce qui explique qu'il y ait une différence pour US98157D1063 puisque le D du 8 ème octet fera qu'il y un chiffre de plus donc pair et impairs sont inversés. De même, pour savoir s'il s'agit d'un impair il faut partir de la fin.
- le chiffre clé doit être pris en compte dans le calcul du modulo
- la somme doit être un multiple de 10

Voici la fonction qui fonctionne dans tous les cas (testée en Vbscript, d'où quelques adaptations sur certaines instructions.

Function isValidIsin(isin)
isin = Trim(isin) 'Retire les espaces
For i = 1 To 12 'Parcours la chaine de caractères, y compris le chiffre de contrôLe
myCar = UCase(Mid(isin, i, 1)) 'Recupere le charactere en Upper
If IsNumeric(myCar) then
myInt = myCar
else
myInt = Asc(myCar) - 55 'Si c'est un alpha, convertion en numeric avec A=10
End If
myCode = myCode & myInt 'Refabrique une chaine de characteres avec les alphas convertis
Next
NbDigits=Len(myCode)
myTotal=Mid(myCode, NbDigits, 1) 'on initialise avec le chiffre clé
For i=NbDigits - 1 To 1 Step -1 'Parcours la nouvelle chaine de droite à gauche en partant de l'avant dernier (le dernier étant le chiffre clé)
If (NbDigits -i) Mod 2 = 0 Then 'si la position du caractère numeric dans la chaine de charactere est Pair en partant de l'avant dernier
myInt = Mid(myCode, i, 1) 'on recupere l'entier
Else 'si la position du charactere numeric dans la chaine de charactere est Impair en partant de l'avant dernier
myInt = Mid(myCode, i, 1) * 2 'on multiplie par 2 l'entier
'si l'entier est plus grand que 9, on additionne le chiffre des dizaines au chiffre des unités , ce qui revient à soustraire 9
'plus simple que : myInt = CInt(Mid(myInt, 1, 1)) + CInt(Mid(myInt, 2, 1))
If myInt > 9 Then myInt = myInt - 9
End If
myTotal = myTotal + myInt 'on fait le total des entiers
Next
'si le code Isin est bien formé c'est un multiple de 10 donc le modulo 10 = 0
checkDigit_calculated = myTotal Mod 10
If (checkDigit_calculated=0) Then
isValidIsin = true
else
isValidIsin= False
end if

End Function
casfla Messages postés 1 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 28 novembre 2006
28 nov. 2006 à 15:54
Bonjour,
le code ISIN suivant US98157D1063 existe bien, mais n'est pas détecté comme valide par la fonction.
(j'ai l'impression que c'est une histoire de modulo 10 au niveau de la ligne :

If (checkDigit 10 - (myTotal Mod 10)) Then isValidIsin True

à modifier en :

If (checkDigit (10 - (myTotal Mod 10)) mod 10) Then isValidIsin True

??
cs_kouke Messages postés 8 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 12 février 2007
22 juil. 2006 à 17:41
Salut tt le monde,
Merci bcp Guillaume1er pour cette fonction, c trés utile pour moi.
Je l'ai utilisé sous "Excel XP" est ça marche trés bien pour verifier la validité d'un ISIN dans une colonne avant de lancer une requet Web sur le site
http://fr.moneycentral.msn.com/investor/quotes/quotes.asp?Symbol= "Votre ISIN"
pour récupérer des valeurs de la bourse .
merci mille fois.
cs_Guillaume1er Messages postés 8 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 3 juin 2006
3 juin 2006 à 12:26
Un code Isin c'est un code identifiant un OPCVM (Ce sont des produits financiers).Ce la facilite l'identification des valeurs Mobilieres.
voici un exemple de Code Isin : FR0000130007
Pour plus d'infos :
http://www.edubourse.com/guide/fiche.php?idFiche=258
VBSorcier Messages postés 102 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 29 avril 2007
2 juin 2006 à 23:14
c'est quoi le code isin, ca ressemble à quoi ?? un ptit exemple !!
Rejoignez-nous