人が生成する場合は、選択コンポーネントを使って不正な、または、間違ったデータができない仕組みを用意しましょう。(参考、アドレス・ベース・レジストリを使った都道府県選択コンポーネント)
その確認もできない環境であれば、チェックデジットが有効ですが、使うアルゴリズムによっては強度が弱いので注意です。今、付ける場合ば、IMI2プロジェクト、GIF/のコード(分類体系)導入実践ガイドブックでも記載されている、Dammアルゴリズム一択です!
「CheckCheckDigits」
現在使われているチェックデジットのアルゴリズムを一通りJavaScript(ESモジュール)で実装してみました。番号を入れるとすべてのアルゴリズムで検査し、正しいものを赤く表示します。
「code4fukui/CheckCheckDigits on GitHub」
Damm, Verhoeff, Luhn, Modulus10, Modulus11, Modulus9の6種類をまとめて検査するAPI、checkCheckDigitsもシンプルに使えるオープンソース。ブラウザ上や、Denoで下記のように使えます。
2015年にスタートした法人番号のチェックデジットが0と9の誤りを検出できないModulus9が採用された理由が気になります。同じく、2015年スタートのマイナンバーこと個人番号も全国地方公共団体コードや、運転免許証などと同じModulus11となってしまったのは残念!(参考、第404号コラム「マイナンバーのチェックデジットについて」 | コラム | デジタル・フォレンジック研究会、1の出現確率が倍 - Modulus11.test.js)
チェックデジットがいらないデジタル社会を理想に、どうしても使う場合はDamm(ダム)アルゴリズムで!
各チェックデジットアルゴリズム、自分のよく使うプログラミング言語への対応貢献、大歓迎!
「CheckCheckDigits src on GitHub」