ISO 7064 – это стандарт, опубликованный Международной организацией по стандартизации, который определяет алгоритмы вычисления контрольных цифр. Проверки должны быть применимы к буквенно-цифровым строкам и должны обнаруживать все одиночные ошибки замены, все или почти все одиночные локальные ошибки транспонирования, все или почти все ошибки циклического сдвига, высокую долю ошибок двойной замены, высокую долю всех других ошибок. ошибки.

Он используется в некоторых других стандартах ISO, таких как IBAN, ISTC, ISNI, LEI. В нашей повседневной жизни мы видим его в IBAN, но мы также можем использовать его во многих других системах, таких как системы идентификации (Хорватия и Китай) и другие.

Итак, лично мне нужна была библиотека для проверки и вычисления этих контрольных цифр в Go. После некоторых исследований я обнаружил, что есть несколько библиотек, таких как digitorus/iso7064 и almerlucke/go-iban, но они жестко закодированы для MOD97–10 (используется в IBAN), и это все. Другие алгоритмы, такие как MOD11–2, MOD37–2, MOD661–26 и MOD1271–36, в них не реализованы. Итак, я решил создать библиотеку, которая удовлетворит мои потребности. Прежде всего, реализация всех перечисленных выше алгоритмов.

Цель

Библиотека, которая позволит вычислять контрольные цифры согласно ISO7064 с использованием MOD11–2, MOD37–2, MOD97–10, MOD661–26, MOD1271–36, а также позволит легко вычислять и встраивать контрольные цифры для IBAN.

Выполнение

Все основано на интерфейсе под названием Calculator, который описывает методы проверки, вычисления полной строки и вычисления контрольных цифр. Вы можете увидеть его код ниже:

Затем есть структура под названием BaseCalculator, которая реализует методы интерфейса Calculator и реализует базовый алгоритм ISO7064. Это код:

Как видите, в структуре BaseCalculator есть поля с именами Modulus, Radix, Charset и IsDouble. Таким образом, различные комбинации этих полей позволяют нам создавать различные алгоритмы, описанные в ISO7064, такие как MOD11–2, MOD37–2, MOD97–10, MOD661–26, MOD1271–36, а также использовать любую другую комбинацию для создания другого нестандартного алгоритма на основе Базовый алгоритм ISO7064. Вот пример создания BaseCalculator для ISO7064 MOD97–10:

Итак, по аналогии мы можем создать BaseCalculator для других алгоритмов.

Но также мы должны реализовать IBANCalculator, который будет выполнять определенные шаги IBAN, такие как перестановка и преобразование букв в целое число. Вот его код:

Он использует BaseController с конфигурацией MOD97–10 для вычисления контрольных цифр, а также переставляет и преобразует буквы в целые числа в IBAN перед вычислением.

Финал

Я никогда не писал статей на Medium или где-либо еще, так что спасибо до конца. Сама библиотека доступна на GitHub pkasila/iso7064 под лицензией Apache License 2.0, так что можете попробовать, я написал несколько тестов, вроде работает нормально. Если у вас есть идеи, вы можете поделиться ими в Обсуждениях или в комментариях, а если вы заметили ошибку, то отправьте вопрос на GitHub. Также вы сами создаете пулреквест и делаете библиотеку лучше.