Я знаю, что уже немного поздно (по дате публикации) , но в первый раз мне понадобился алгоритм проверки номера чека на прошлой неделе.
Итак, я проверил больше алгоритмов, и ИМХО, лучшее решение (только для цифр), кажется, алгоритм Дамма .
Он прост в реализации и обнаруживает большинство проверенных ошибок (все ошибки с одной цифрой и все ошибки транспонирования, почти все ошибки транспонирования скачка) .
Для меня была только одна проблема, поскольку мне нужно вычислять контрольную цифру не только из цифр, но и из символов. Существует множество способов транскрибировать символы в цифры, но обнаружение ошибок всегда будет ниже, чем используются только цифры.
Для этих случаев вы можете использовать спецификацию ISO_6346 .