チェックディジットの算出

コンピュータシステムでは、商品コードや社員コードなど英数字でコードが振られ、データ入力時にいちいち全部入力するのではなくコードを入力することで手間を省くことができます。
また、コード化により商品別に売上を集計したり、社員別に経費精算することが容易になります。
ただ、コードが単純に順番に振られていた場合、入力ミスがあっても間違ったコードのままで処理されてしまいます。

そのため重要なコード(契約番号など)には、事前に取り決めたの法則によって数値やアルファベットを算出して、順番で振られたコードへ付け足すことにより、入力されたコードがその法則に一致しているかをチェックして、不一致なら入力ミスだと判断するようなチェックを掛けることがあります。
特にバーコードリーダーで読み取る場合に、読み取りエラーを検出するためにチェックディジットを付けていることが多いです。身近な例では、書籍の背表紙にあるコード(ISBN)とか、日用品や食料品に印刷されているバーコード(JANコード)などがあります。

この算出する数値やアルファベットのことをチェックディジットと呼び、情報処理技術者でしたら常識として知っています。

チェックディジットの算出は、JANコードなどのように、商品流通の過程で使用されるコードと違い、社内システムの場合は一定の法則を取り決めてあれば良いので、どの方式が使用されるかはシステムによって違います。
これまでの経験では「モジュラス11」という法則が良く使用されているようです。
これは、振られたコードの各桁に定数を掛けて得られた積を合計して11の剰余を算出することでチェックディジットが決まるというものです。

【例】
振られたコード「3591」
定数は上位桁から順に「5,4,3,2」を使用する。

■ステップ1:各桁の積を算出
3×5=15
5×4=20
9×3=27
1×2=2

■ステップ2:ステップ1の結果を集計
15+20+27+2=64

■ステップ3:ステップ2の結果について11の剰余を算出
64÷11=5 余り 9

■ステップ4:ステップ3の結果の1の位をチェックディジットとして元のコードの末尾に付ける
35919

で、エクセル関数でステップ3までを算出する場合、以下のようになります。(見やすいよう改行してあります)
元の「3519」はセルB2に入っています。

=MOD(
MOD(
TRUNC(MOD(B2,10^4)/10^3)*5+
TRUNC(MOD(B2,10^3)/10^2)*4+
TRUNC(MOD(B2,10^2)/10^1)*3+
TRUNC(MOD(B2,10^1)/10^0)*2
,11)
,10)

Googleで上のような関数式がないかと検索してみたのですが、思ったように引っかかりませんでした。
自分で作っている最中に、これはネタになると思ってまとめてみました。
参考までに。