Quel algorithme utiliser pour calculer un chiffre de contrôle pour une liste de chiffres?
La longueur de la liste est comprise entre 8 et 12 chiffres. P>
Voir aussi:
Comment générer un code de vérification / numéro? P>
5 Réponses :
Le L'algorithme de Luhn est assez bon pour l'industrie de la carte de crédit ... P >
L'algorithme de Luhn est faible à faible, essayez d'échanger le premier chiffre avec le dernier chiffre - Ooops, valide!
@Alixaxel Il est peut-être vrai que l'échange de premier et dernier résultera de validité, mais toute l'idée de Luhn Algorithm est juste pour empêcher / réduire l'erreur d'entrée utilisateur. Signification, si l'utilisateur final entrait un numéro de 16 chiffres de 16 chiffres du numéro de compte client, il a 10% de risque (plus ou moins) d'être valide. Mais il est toujours plus précis de valider les autres détails tels que le nom de compte ainsi que le numéro de compte si c'est beaucoup les données de la base de données.
@Alixaxel Wiki Signification de Luhn Algo ou du chiffre de chèques - Conçu pour protéger contre les erreurs accidentelles, pas les attaques malveillantes.
Comme Richiehindle souligne, l'algorithme de Luhn est plutôt bon. Il détectera (mais pas correct) une erreur ou une transposition (sauf une transposition de 0 et 9). P>
Vous pouvez également envisager l'algorithme de ISBN Vérifier les chiffres , bien que pour l'ancien Style ISBN, le chiffre de contrôle est parfois "X", ce qui peut être un problème pour vous si vous utilisez des champs entier. Le nouveau style ISBN ne semble pas avoir ce problème. Wikipedia ne va pas dans les propriétés théoriques du système, mais je me souviens d'étudier les chiffres ISBN dans mon cours de théorie de codage il y a longtemps, alors je pense qu'ils sont plutôt bons: -) p>
Verhoeff , il n'y a rien de mieux imo. P>
Pourquoi n'y a-t-il rien de mieux? Quelles propriétés cet algorithme a-t-il que d'autres ne le font pas?
Je sais que c'est un peu en retard (selon les dates de poste), mais la première fois que j'avais besoin d'un algorithme de numéro de chèque était la semaine dernière. P>
J'ai donc vérifié plus d'algorithmes et d'IMHO La meilleure solution semble être le Damm Algorithm . Il est simple de mettre en œuvre et détecter la plupart des erreurs testées. Avec la table de contrôle de chiffre par défaut, toutes les erreurs d'une seule chiffre, toutes les erreurs de transposition de langue anglaise, toutes les erreurs de transposition adjacentes, et presque toutes les erreurs de transposition de saut sont détectables. P>
Pour moi, il n'y avait qu'un seul problème, car j'ai besoin de calculer le chiffre de contrôle non seulement des nombres mais aussi des caractères. Malheureusement pour moi, il y avait une règle donnée que le dernier caractère doit être un chiffre; Ou mieux dire, les personnages ont été attribués par autorité tierce et uniquement une quantité fixe de nombres ont été utilisées comme numéro de fabricant. P>
Il existe de nombreuses façons de transcrire des caractères à un numéro, mais la détection d'erreur sera toujours plus basse, comparant uniquement lorsque seuls les numéros sont utilisés. P>
Pour ces cas, vous pouvez utiliser le spécification ISO_6346 . P>
Lorsqu'il n'y a pas de limitation de ce type, utilisez les tableaux pour différentes tailles et attribuez des caractères et un numéro à Valeurs de table . P>
EDIT STRT>: Mise à jour / Description FIXE, Raison ajoutée du numéro de contrôle du chiffre pour des caractères et des tables ajoutées pour différentes tailles de base. P>
Je ne crois pas que l'algorithme Damm est limitée aux chiffres seulement. Une table plus grande doit pouvoir être générée avec les propriétés requises. Vous pouvez ensuite convertir des valeurs non numériques en équivalent numérique (A = 10, B = 11, ...) et effectuez l'algorithme avec la mise en garde que tout caractère valide de la chaîne d'entrée est une valeur valide pour le chiffre de contrôle.
Wikipedia ( MD-Software.de/math/damm_quasigruppen .txt )
@ jswolf19: Vous avez raison. J'ai déjà trouvé les tables il y a longtemps, mais j'ai oublié que cette réponse a déclaré "seulement des chiffres" et j'ai donc oublié de mettre à jour la réponse. Mais dans mon cas (la nécessité de mettre en œuvre le chiffre de contrôle) était limitée au chiffre, je ne l'ai donc pas effectué à ce moment-là. La réponse est déjà mise à jour. Et la transcription (A = 10, B = 11 ...) fait partie de ISO_6346 , Mais les résultats n'étaient pas bons. Je l'ai testé et au moins un orthographe testé (caractère différent) ou une erreur de transposition n'a pas été détecté.