モジュラス11(ウェイト2,3,4,5,6,7)について調べました。
モジュラス11
- 右から数えて、1番目の数は2倍、2番目の数は3倍、…、6番目の数は7倍とします。7番目の数は2倍、8番目の数は3倍として以下、繰り返し、これらを合計します。
- 合計を11で割ったあまりを求めます。
- あまりが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;
}
//チェックデジット(モジュラス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
'チェックデジット(モジュラス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
コメント
すみません。教えて下さい。
vbaは素人ですが、モジュレ11の計算式をつくることになりました。
このサンプルはsubがありませんが
動きますか?
任意にsubを加えてもend subが必要としつうごきません、
どうか教えていただけませんでしょうか?
小林守彦さん
VBAではSubを使ってコードを書くとマクロを選んで実行するという使い方ができます。
一方、Functionだとマクロを選んで実行するという使い方はできません。
主に値を与えて計算した結果を返すという使い方をすることが多いです。
ここで示したFunctionはワークシート上で使えます。
例えばA1セルに「123」と入力しB1セルに「=checkdigit_m11(A1)」とすると変換した値がB1セルに表示されます。
ありがとうございます。
なにせまっわからない状態でやらされてますので、つまらない質問にお答えくださりありがとうございます。