Calcul de conformité clé ean13

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 638 fois - Téléchargée 20 fois

Contenu du snippet

un petit programme pour tester la validité d'un code EAN13 (surtout la clé)
je rajouterais dans une prochaine mise à jour pour les autres formats (dun14,EAN13 + 2 EAN13 +5 EAN8)

Source / Exemple :


Réalisé sous access 2007 peut être porté sous d'autres langages 
un formulaire que l'on nomme FORM_FEAN13
un Module
dans le form un champ text EAN13TXT
un bouton de commande

Dans le code du formulaire:

Sub Commande0_Click()
Dim MonCodeEAN13, Mylen, Mychek
MonCodeEAN13 = Form_FEAN13.EAN13TXT.Value
Mychek = IsNumeric(MonCodeEAN13)
If Mychek = True Then
Mylen = Len(MonCodeEAN13)
If Mylen = 13 Then
Debug.Print MonCodeEAN13
MaVerif = verif_ean13(MonCodeEAN13)
If MaVerif = True Then
MsgBox "EAN 13 valide", vbOKOnly, "Contrôle EAN 13"
Else: MsgBox "EAN 13 non valide, vérifiez votre saisie ou la clé de contrôle (dernier chiffre)", vbCritical, "Contrôle EAN 13"
End If
ElseIf Mylen > 13 Then

MsgBox "longueur EAN13 incorrecte il y a  " & Mylen & " chiffre en plus controlez votre saisie", vbCritical, "Longueur EAN13 incorrecte"
Else
Mylen = (13 - Mylen)
MsgBox "longueur EAN13 incorrecte il manque " & Mylen & " chiffre controlez votre saisie", vbCritical, "Longueur EAN13 incorrecte"
End If
Else
MsgBox "Le champ EAN13 ne doit contenir que des chiffres, controlez votre saisie", vbCritical, "Donnée EAN13 saisie invalide"
End If
End Sub

Dans le module:
Public Function verif_ean13(ean13) As Boolean

Rem ean13 = '4719512002889' pour test

Dim C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12 As Variant
Dim C13 As Integer
Dim result1, result2, result3 As Integer

C1 = Mid(ean13, 1, 1) * 1
C2 = Mid(ean13, 2, 1) * 3
C3 = Mid(ean13, 3, 1) * 1
C4 = Mid(ean13, 4, 1) * 3
C5 = Mid(ean13, 5, 1) * 1
C6 = Mid(ean13, 6, 1) * 3
C7 = Mid(ean13, 7, 1) * 1
C8 = Mid(ean13, 8, 1) * 3
C9 = Mid(ean13, 9, 1) * 1
C10 = Mid(ean13, 10, 1) * 3
C11 = Mid(ean13, 11, 1) * 1
C12 = Mid(ean13, 12, 1) * 3
C13 = Mid(ean13, 13, 1) 'clé de contrôle

result1 = ((C1 + C2 + C3 + C4 + C5 + C6 + C7 + C8 + C9 + C10 + C11 + C12) / 10)
If Len(result1) = 4 Then
result2 = (Mid(result1, 4, 1)) ' le resultat de la division est par exemple 10,1
result3 = 10 - result2 'résultat de la clé de contrôle calculée
ElseIf Len(result1) = 3 Then
result2 = (Mid(result1, 3, 1)) ' le resultat de la division est par exemple 8,1
result3 = 10 - result2 'résultat de la clé de contrôle calculée
Else
'cas de figure ou le resulat est un entier pure
result3 = 10 - result2 'résultat de la clé de contrôle calculée
End If

verif_ean13 = (result3 = C13) 'renvoie vrai ou faux

End Function

Conclusion :


très utile dans la gestion des produits :)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1221
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018

Voir aussi : VÉRIFIER LA CONFORMITÉ D'UN CODE EAN (EUROPEAN ARTICLE NUMBERING) SUR 13 CARACTÈRES
www.vbfrance.com/code.aspx?ID=28143
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
Dim C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13 As Integer

ici, seul C13 est un Integer, les autres seront des Variants

C12 = Mid(ean13, 12, 1) * 3

manque un Val ou un test sur la numéricité du tout, non ?

If result3 = C13 Then
verif_ean13 = True
Else: verif_ean13 = False
End If
se dit :verif_ean13 (result3 C13)

result2 = (Mid(result1, 4, 1))
pourquoi 4 ? il te faut prendre le chiffre des unités...

Je coderai :

Sub test()
'9782940199617
MsgBox verif_ean13("4719512002889")
End Sub

Public Function verif_ean13(ean13 As String) As Boolean
Dim xsParts() As Byte
Dim i As Integer
Dim c As Integer
Dim Cumul As Long
If Len(ean13) = 13 Then
xsParts = StrConv(ean13, vbFromUnicode)
For i = 0 To 11
c = xsParts(i) - 48
If c < 0 Or c > 9 Then
Exit Function
End If
Cumul = Cumul + c + (2 * c * (i And 1))
Next
c = xsParts(i) - 48
Cumul = 10 - (Cumul - 10 * (Cumul \ 10)) verif_ean13 (c Cumul)
End If
End Function

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.