sysLib.calculateChkDigitMod11

系统函数 sysLib.calculateChkDigitMod11 将模 11 校验数位放入以一系列整数开始的字符项中。


sysLib.calculateChkDigitMod11 语法图
input
以一系列整数开头的字符项。该项必须包含用于存放校验数位的附加位置,该位置紧跟在其它整数的右边。
checkLength
一个项,它包含 input 项中要使用的字符数,包括用于校验数位的位置。此项有 4 位,具有 SMALLINT 类型或 BIN 类型,并且不带小数位。
result
一个项,它接收下列两个值的其中一个:
  • 0,如果已创建校验数位的话
  • 1,如果未创建校验数位的话

此项有 4 位,具有 SMALLINT 类型或 BIN 类型,并且不带小数位。

可以在函数调用语句中使用 sysLib.calculateChkDigitMod11

示例

在以下示例中,myInput 是类型为 CHAR 的项并包含值 56621869;myLength 是类型为 SMALLINT 的项并包含值 8;myResult 是类型为 SMALLINT 的项:
  sysLib.verifyChkDigitMod (myInput, myLength, myResult);
使用了一种算法来派生模 11 校验数位,在所有情况下,都不考虑校验数位位置中的数字。就示例值对算法描述如下:
  1. 将输入数字的个位数位置中的数字乘以 2,在十位上乘以 3,在百位上乘以 4,依此类推,但将 myLength - 1 用作最大乘数;如果输入数字包含更多的位,则再次开始此序列并以 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。

在此示例中,myInput 中最前面的字符变为:
  56621865
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.