calculateChkDigitMod11()
sysLib.calculateChkDigitMod11() システム関数は、一連の数字で始まる NUM 変数または文字変数にモジュラス 11 チェック・ディジットを配置します。
構文
sysLib.calculateChkDigitMod11(
text CHAR | NUM inOut,
checkLength INT in,
result SMALLINT inOut)
- text
- 一連の数字で始まる NUM 変数または CHAR 変数。 この変数には、その他の文字のすぐ右に、チェック・ディジット用の追加の位置が含まれている必要があります。 先頭文字 (checkLength - 1 まで) は数字である必要があります。 数字以外の場合は、EGL によって RuntimeException がスローされます。
- checkLength
- text パラメーター内の検証する文字数が格納された INT 変数。チェック・ディジットに使用される桁位置も含みます。 NUM 変数が text パラメーターとして渡される場合は、先行ゼロの数です。したがって、ほとんどの場合、checkLength は NUM 変数の長さと等しくなります。
- result
- 次の 2 つの値のいずれかを受け取る SMALLINT 変数です。
- チェック・ディジットが作成された場合は 0
- チェック・ディジットが作成されなかった場合は 1
例
次の例では、sysLib.calculateChkDigitMod11 を使用して、 アカウント番号が正確に送信されたことを確認しています。
program CheckDigit11 type BasicProgram
acctNo CHAR(10) = "56621869";
len SMALLINT = 8;
result SMALLINT = 0;
function main()
sysLib.calculateChkDigitMod11 (acctNo, len, result);
if (result != 0)
sysLib.writeStdout("Check digit not created");
end
sysLib.writeStdout(acctNo);
// acctNo is 56621865
end // main
end // program
EGL では、アルゴリズムを使用して、モジュラス 11 チェック・ディジットを
派生させます。いずれの場合でも、チェック・ディジットの位置に格納されている数値は考慮されません。
アルゴリズムについて、例の値を使用して説明します。
- 入力数値の単位の桁にある数字に 2 を、10 の位に 3 を、100 の位に 4 を、というように乗算していきます。
乗数として使用する最大数値は 7 です。
入力数値の桁数が 7 桁を超える場合は、2 を乗数として使用することにより、再度このシーケンスを始めます。
6 x 2 = 12 8 x 3 = 24 1 x 4 = 4 2 x 5 = 10 6 x 6 = 36 6 x 7 = 42 5 x 2 = 10 - 最初のステップの積を加算し、合計を 11 で除算します。
(12 + 24 + 4 + 10 + 36 + 42 + 10) / 11 = 138 / 11 = 12 余り 6 - チェック・ディジットを算出するには、11 から余りを減算して自己検査ディジットを得ます。
11 - 6 = 5余りが 0 または 1 である場合、チェック・ディジットは 0 です。
この例では、最終的な acctNo には以下の文字が格納されます。
56621865
互換性に関する考慮事項
| プラットフォーム | 問題 |
|---|---|
| JavaScript 生成 | 関数 sysLib.calculateChkDigitMod11() はサポートされていません。 |