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 チェック・ディジットを 派生させます。いずれの場合でも、チェック・ディジットの位置に格納されている数値は考慮されません。 アルゴリズムについて、例の値を使用して説明します。
  1. 入力数値の単位の桁にある数字に 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  
  2. 最初のステップの積を加算し、合計を 11 で除算します。
      (12 + 24 + 4 + 10 + 36 + 42 + 10) / 11
      = 138 / 11 
      = 12 余り 6 
  3. チェック・ディジットを算出するには、11 から余りを減算して自己検査ディジットを得ます。
      11 - 6 = 5

    余りが 0 または 1 である場合、チェック・ディジットは 0 です。

この例では、最終的な acctNo には以下の文字が格納されます。
  56621865

互換性に関する考慮事項

表 1. 互換性に関する考慮事項
プラットフォーム 問題
JavaScript 生成 関数 sysLib.calculateChkDigitMod11() はサポートされていません。

フィードバック