モジュラス11のチェックデジット

Pocket

モジュラス11(ウェイト2,3,4,5,6,7)について調べました。

  1. 右から数えて、1番目の数は2倍、2番目の数は3倍、…、6番目の数は7倍とします。7番目の数は2倍、8番目の数は3倍として以下、繰り返し、これらを合計します。
  2. 合計を11で割ったあまりを求めます。
  3. あまりが0のときは「0」、0以外のときは「11-あまり」がチェックデジットとなります。

JavaScriptとVBAでサンプルを作ってみました。

JavaScript

function checkdigit_m11(txt) {
    //チェックデジット(モジュラス11ウェイト2-7)
    var s = 0, i;
    for (i = 0; i < txt.length; i += 1) {
        s += txt.substr(txt.length - i - 1, 1) * (i % 6 + 2);
    }
    return s % 11 === 0 ? 0 : 11 - s % 11;
}

VBA

Function checkdigit_m11(txt)
    'チェックデジット(モジュラス11ウェイト2-7)
    For i = 0 To Len(txt) - 1
        s = s + Mid(txt, Len(txt) - i, 1) * (i Mod 6 + 2)
    Next
    If s Mod 11 = 0 Then
        checkdigit_m11 = 0
    Else
        checkdigit_m11 = 11 - s Mod 11
    End If
End Function

[ 2012年12月26日 | カテゴリー: JavaScript | タグ: , ]

« | »

コメント

  1. 小林守彦 より:

    すみません。教えて下さい。
    vbaは素人ですが、モジュレ11の計算式をつくることになりました。
    このサンプルはsubがありませんが
    動きますか?
    任意にsubを加えてもend subが必要としつうごきません、
    どうか教えていただけませんでしょうか?

  2. stabucky より:

    小林守彦さん
    VBAではSubを使ってコードを書くとマクロを選んで実行するという使い方ができます。
    一方、Functionだとマクロを選んで実行するという使い方はできません。
    主に値を与えて計算した結果を返すという使い方をすることが多いです。
    ここで示したFunctionはワークシート上で使えます。
    例えばA1セルに「123」と入力しB1セルに「=checkdigit_m11(A1)」とすると変換した値がB1セルに表示されます。

  3. Kobayashi Morihiko より:

    ありがとうございます。
    なにせまっわからない状態でやらされてますので、つまらない質問にお答えくださりありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報