モジュラス11のチェックデジット
モジュラス11(ウェイト2,3,4,5,6,7)について調べました。
- 右から数えて、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
[ 2012年12月26日 | カテゴリー: JavaScript | タグ: チェックデジット , ユーザー定義関数 ]
« 「ドンナヒ」に円相場と金価格を表示 | Excelで最初の1文字が勝手に確定される »
コメント
-
ありがとうございます。
なにせまっわからない状態でやらされてますので、つまらない質問にお答えくださりありがとうございます。
すみません。教えて下さい。
vbaは素人ですが、モジュレ11の計算式をつくることになりました。
このサンプルはsubがありませんが
動きますか?
任意にsubを加えてもend subが必要としつうごきません、
どうか教えていただけませんでしょうか?