Page 1 sur 1

Calcul Cle ISBN10

MessagePublié: 25 Oct 2007 à 14:17
par Michael DELIQUE
Code : Tout sélectionner
Function CleISBN10(wISBN As String) As String
   
   'Déclaration Variables
   Dim ISBN As String
   Dim Char As String
   Dim i As Integer
   Dim nbCoef As Integer
   Dim nbCLE As Integer
   
   On Error Goto ErreurHandle
   
   If Trim(wISBN) = "" Then
      CleISBN10 = ""
      Exit Function   
   End If
   
   'elemination des caracteres superflux
   ISBN = ""
   For i = 1 To Len(wISBN)
      Char = Mid(wISBN,i,1)
      If Char Like "[0-9]"  Then
         ISBN = ISBN + Ucase(Char)
      End If
      Char = ""
   Next
   
   'si 10 caratere c'est que la clé de controle est intégré au code ISBN
   If Len(ISBN) = 10 Then
      ISBN = Left(ISBN,9)
   End If
   
   If Len(ISBN) <> 9 Then
      CleISBN10 = ""
      Exit Function   
   End If
   
   nbCoef = 10
   nbCLE = 0
   For i = 1 To Len(ISBN)
      Char = Mid(ISBN,i,1)
      nbCLE = nbCLE + (Cint(Char)*nbCoef)
      nbCoef = nbCoef-1
      Char = ""
   Next
   ISBN = ""
   
   CleISBN10 = Cstr(11 -(nbCLE Mod 11))
   
   If CleISBN10 = "10" Then
      CleISBN10 = "X"
   End If
   
%REM
wikipédia

 Calcul du chiffre clé d'un numéro ISBN à 10 chiffres [modifier]

    * On attribue une pondération à chaque position (de 10 à 2 en allant en sens décroissant) et on fait la somme des produits ainsi obtenus.
    * On conserve le reste de la division euclidienne de ce nombre par 11. La clé s'obtient en retranchant ce nombre à 11.
    * Si le reste de la division euclidienne est 0, la clé de contrôle n'est pas 11 (11 - 0 = 11) mais 0
    * De même si le reste de la division euclidienne est 1, la clé de contrôle n’est pas 10 mais la lettre X. Ceci permet donc d’avoir réciproquement pour les restes de la division 0, 1, 2, 3, ... 10 les codes 0, X, 9, 8, ... , 1.

Remarques
    11 étant un nombre premier, une erreur portant sur un chiffre entraînera automatiquement une incohérence du code de contrôle.
    La vérification du code de contrôle peut se faire en effectuant le même calcul sur le code ISBN complet, en appliquant la pondération 1 au dixième chiffre de la clé de contrôle (si ce chiffre clé est X, on lui attribue la valeur 10) : la somme pondérée doit alors être un multiple de 11.

Exemple
    Pour le numéro ISBN (à 9 chiffres) 2-266-11156 quelle est la clé de contrôle ?

Code ISBN (exemple)    2    2    6    6    1    1    1    5    6
Pondération    10    9    8    7    6    5    4    3    2
Produit    20    18    48    42    6    5    4    15    12

    Soit au total 170 dont le reste de la division euclidienne par 11 est 5.
    La clé de contrôle est donc 11 - 5 = 6.
    L’ISBN au complet est : 2-266-11156-6. Il s'agit ici de l'ISBN de l'édition de poche de La Chute d'Hypérion de Dan Simmons.
    La vérification de la clé complète à 10 chiffres donne la somme pondérée 170 + 6 = 176, qui est bien un multiple de 11.
%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 !"
   CleISBN10 = ""
   Exit Function   
End Function