So che è un po 'tardi (in base alle date di post), ma la prima volta che avevo bisogno di un algoritmo di controllo numero era la scorsa settimana.
Così ho controllato più algoritmi e IMHO la soluzione migliore (solo per cifre) sembra essere il Damm algorithm. È semplice da implementare e rileva la maggior parte degli errori testati (tutti gli errori di una sola cifra e tutti gli errori di trasposizione, quasi tutti gli errori di trasposizione di salto).
Per me c'era un solo problema, dal momento che ho bisogno di calcolare le cifre di controllo non solo dai numeri ma anche dai caratteri. Esistono molti modi per trascrivere i caratteri in numero, ma il rilevamento degli errori sarà sempre inferiore rispetto ai soli numeri utilizzati.
In questi casi è possibile utilizzare la specifica ISO_6346.
L'algoritmo di Luhn è troppo debole, prova a scambiare la prima cifra con l'ultima cifra - oops, valida! –
@AlixAxel Può essere vero che lo scambio del primo e dell'ultimo risulterà valido ma l'intera idea di Luhn Algorithm è solo per prevenire/ridurre l'errore di input dell'utente. Significa che se l'utente finale immette un numero di 16 cifre errato del numero di conto del cliente, ha il 10% (più o meno) di possibilità di essere valido. Ma è ancora più accurato convalidare gli altri dettagli come Nome account insieme al numero di account se contiene molti dati nel database. –
@AlixAxel Wiki significato di Luhn Algo o cifra di controllo - progettato per proteggere da errori accidentali, non da attacchi malevoli. –