Calcul Cle ISSN

Calcul Cle ISSN

Messagepar Michael DELIQUE » 26 Oct 2007 à 08:09

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
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