Validation d'un code isin

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 512 fois - Téléchargée 27 fois

Contenu du snippet

Petite Fonction qui vérifie la validité d'un code Isin, utile pour ceux qui ont à faire des traitement en VB avec les OPCVM.

Source / Exemple :


Private Function isValidIsin(isin As String) As Boolean
    'renvoie un boolean
    
    Dim myCode          As String
    Dim checkDigit      As Integer
    Dim myCar           As String
    Dim myInt           As Integer
    Dim myTotal         As Integer
    Dim tempCK          As String
    
    isin = Trim(isin) 'Retire les espaces
    If Len(isin) = 12 Then 'verifie la taille
        tempCK = Mid(isin, 12, 1) 'extrait le checkDigit
        If IsNumeric(tempCK) Then 'on vérifie que c'est bien un numéric
            checkDigit = tempCK
            For i = 1 To 11 'Parcour la chaine de characteres
                myCar = UCase(Mid(isin, i, 1)) 'Recupere le charactere en Upper
                myInt = IIf(IsNumeric(myCar), myCar, Asc(myCar) - 55) 'Si c'est un alpha, convertion en numeric
                myCode = myCode & myInt 'Refabrique une chaine de characteres avec les alphas convertis
            Next i
            For i = 1 To Len(myCode) 'Parcour la nouvelle chaine
                If i Mod 2 = 0 Then 'si la position du charactere numeric dans la chaine de charactere est Pair
                    myInt = Mid(myCode, i, 1) 'on recupere l'entier
                Else 'si la position du charactere numeric dans la chaine de charactere est Impair
                    myInt = Mid(myCode, i, 1) * 2 'on multiplie par 2 l'entier
                    If myInt > 9 Then myInt = CInt(Mid(myInt, 1, 1)) + CInt(Mid(myInt, 2, 1))
                    'si l'entier est plus grand que 9, on additionne le chiffre des dizaines au chiffre des unités
                End If
                myTotal = myTotal + myInt 'on fait le total des entiers
            Next i
            If (checkDigit = 10 - (myTotal Mod 10)) Then isValidIsin = True
            'si le checkDigit est egale a 10 - le total des entiers modulo 10, le code Isin est bien formé
        End If

    End If
    
End Function

Conclusion :


J'espere que les commentaires sont assez clairs pour comprendre la manière dont sont fabriqués les codes Isin et l'algo utilisé.
J'espere surtout que cette fonction interressera quelqu'un.
Comme j'ai du l'écrire, je la partage.
:)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
lundi 25 mai 2009
Statut
Membre
Dernière intervention
24 novembre 2010

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
Messages postés
1
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
28 novembre 2006

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

??
Messages postés
8
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
12 février 2007

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.
Messages postés
8
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
3 juin 2006

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
Messages postés
102
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
29 avril 2007

c'est quoi le code isin, ca ressemble à quoi ?? un ptit exemple !!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.