Calcul Cle ISMN

Calcul Cle ISMN

Messagepar Michael DELIQUE » 26 Oct 2007 à 09:57

Code : Tout sélectionner
Function CleISMN(wISMN As String) As Integer
   
   'Déclaration variables
   Dim ISMN As String
   Dim i As Integer
   Dim nbCoef As Integer
   Dim Char As String
   
   On Error Goto ErreurHandle
   
   If Trim(wISMN) = "" Then
      CleISMN = -1
      Exit Function
   End If
   
   'le premier caractere doit être un M
   If Ucase(Left(Trim(wISMN),1)) <> "M" Then
      CleISMN = -1
      Exit Function
   End If
   
   'elemination des caracteres superflux
   'on remplace le M par un 3
   ISMN = "3"
   For i = 2 To Len(Trim(wISMN))
      Char = Mid(wISMN,i,1)
      If Char Like "[0-9]"  Then
         ISMN = ISMN+ Char
      End If
      Char = ""
   Next
   
   'sila taille = 10 c'est que la clé est ajouté
   If Len(ISMN) = 10 Then
      ISMN = Left(ISMN,9)
   End If
   
   If Len(ISMN) <> 9 Then
      CleISMN = -1
      Exit Function
   End If
   
   nbCoef = 1
   CleISMN = 0
   For i = 1 To Len(ISMN)
      Char = Mid(ISMN,i,1)
      If nbCoef = 3 Then
         nbCoef = 1
      Else
         nbCoef = 3
      End If
      CleISMN = CleISMN + (Cint(Char)*nbCoef)
      Char = ""
   Next
   ISMN = ""
   
   CleISMN = Cstr(10 - (CleISMN  Mod 10))
   
%REM
wikipedia

Pour calculer la clé de contrôle, chaque caractère de l'ISMN est multiplié par un poids, alternativement 3 et 1 de gauche à droite. La lettre M prend la valeur arbitraire 3. On additionne ensuite ces produits. La clé de contrôle est l'entier compris entre 0 et 9 qui permet à la somme d'atteindre le prochain multiple de 10.

Par exemple, pour l'ISMN commençant par M-060-11561:

3xM + 1x0 + 3x6 + 1x0 + 3x1 + 1x1 + 3x5 + 1x6 + 3x1 =
 9  +  0  +  18 +  0  +  3  +  1  +  15 +  6  +  3  =  55

55+5 = 60 est un multiple de 10, ainsi la clé de contrôle vaut 5 et l'ISMN complet est M-060-11561-5.
%END REM
   
   Exit Function
ErreurHandle:
   Msgbox "("+Cstr(Getthreadinfo (1))+" Call by "+Cstr(Getthreadinfo(10))+")"+Chr(10)+"Erreur " + Str(Err) + " : "+Chr(10) + Cstr(Error)+". "+Chr(10)+"Ligne N° "+Cstr(Erl),16," ERREUR !"
   CleISMN = -1
   Exit Function
End Function
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Retour vers Divers