Page 1 sur 1

Calcul Cle ISSN

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

 Règle de calcul de la clé [modifier]

On attribue une pondération à chaque position (de 8 à 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. On retranche ce nombre à 11 : c'est la clé.

    Exemple : Pour le numéro ISSN (à 7 chiffres) ISSN 0395-203 quelle est-la clé de contrôle ?

Exemple de calcul de clé Code ISSN    0    3    9    5    2    0    3
Pondération    8    7    6    5    4    3    2
Produit    0    21    54    25    8    0    6

    Soit au total 114 dont le reste de la division euclidienne par 11 est 4. La clé de contrôle est donc 11 - 4 = 7.
    L'ISSN au complet est : ISSN 0395-2037 (Il s'agit de l'ISSN du quotidien Le Monde).

Remarque : 11 étant un nombre premier, une erreur portant sur un chiffre entraînera automatiquement une incohérence du code de contrôle.
%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 !"
   CleISSN = -1
   Exit Function   
End Function