2009-07-08 7 views

Répondre

7

Le Luhn algorithm est assez bon pour l'industrie des cartes de crédit ...

+0

L'algorithme de Luhn est trop faible, essayez d'échanger le premier chiffre avec le dernier chiffre - ooops, valide! –

+0

@AlixAxel Il est peut-être vrai que l'échange de premier et dernier aboutira à valide, mais l'idée de Luhn Algorithm est juste d'empêcher/de réduire l'erreur de saisie de l'utilisateur. Par exemple, si l'utilisateur final saisit un mauvais numéro à 16 chiffres du numéro de compte client, il a 10% (plus ou moins) de chance d'être valide. Mais il est encore plus précis de valider l'autre détail comme le nom du compte avec le numéro de compte si beaucoup les données dans la base de données. –

+2

@AlixAxel Wiki sens de Luhn Algo ou chiffre de contrôle - conçu pour protéger contre les erreurs accidentelles, pas d'attaques malveillantes. –

5

Comme RichieHindle souligne, l'algorithme Luhn est assez bon. Il détectera (mais ne corrigera pas) une erreur ou une transposition (sauf une transposition de 0 et 9).

Vous pouvez également considérer l'algorithme pour ISBN check digits, bien que pour l'ISBN ancien, le chiffre de contrôle soit parfois "X", ce qui peut être un problème pour vous si vous utilisez des champs entiers. L'ISBN de nouveau style ne semble pas avoir ce problème. Wikipédia ne va pas aux propriétés théoriques du système, mais je me souviens d'étudier les numéros ISBN dans mon cours théorique de codage depuis longtemps, donc je pense qu'ils sont assez bien :-)

+0

+1 pour le chiffre de contrôle ISBN. Cela m'a ramené des souvenirs ... –

2

Verhoeff, il n'y a rien de mieux l'OMI.

+0

Pourquoi n'y a-t-il rien de mieux? Quelles sont les propriétés de cet algorithme que les autres n'ont pas? –

2

Je sais qu'il 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.

J'ai donc vérifié plus d'algorithmes et à mon humble avis la meilleure solution (pour les chiffres seulement) semble être le Damm algorithm. Il est simple à mettre en œuvre et de détecter la plupart des erreurs testées (toutes les erreurs à un chiffre et toutes les erreurs de transposition, presque toutes les erreurs de transpositions de saut). 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 chiffres mais aussi des caractères. Il y a plusieurs façons de transcrire les caractères en nombre, mais la détection des erreurs sera toujours plus faible que les nombres seuls.

Pour ces cas, vous pouvez utiliser la spécification ISO_6346.

Questions connexes