simbiat/accountkeying

基于俄罗斯中央银行逻辑的账户键控库。

2.1.4+20240616 2024-06-16 08:54 UTC

README

在账户键控中实现俄罗斯中央银行逻辑,允许验证账户号码。

如何使用

非常简单明了

\Simbiat\AccountKeying::accCheck('123456789', '12345678901234567890');

就是这样。它将返回 truefalse。第一个数字是 BIC 号码,第二个数字是您正在检查的账户。

按照 CBR 的算法

计算账户号码中控制键的顺序

在个人账户号码中

顺序

俄罗斯联邦中央银行

1997年9月8日

N 515

(D)

根据俄罗斯联邦境内信贷组织会计核算规则,批准的俄罗斯联邦中央银行令第02-263号规定的个人账户标识方案假定存在控制(保护)键,其值按以下程序计算。

  1. 控制键用于在处理结算文件时检查个人账户号码的正确性。

  2. 计算控制键使用两个凭证的总和 - 条件性 RKC 号码(如果个人账户在 RKC 开设)或信贷组织(如果个人账户在信贷组织开设)和账户号码。

                                      Контрольный ключ (К)
                                     ______________________
                                                           |    Порядковые номера разрядов _______________________________
    

---------------- ----------------------------------------------------------------------------------------------------- | | 1 | 2 | 3 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |____|

| |_________________________________________________ |_____________条件性 RKC 或信贷组织号码

  1. 三位条件性 RKC 号码的值对应于银行识别码(BIC)的第五和第六位,左边补零至三位。

  2. 条件性信贷组织号码的值对应于 BIC 的第七、第八和第九位。

  3. 使用为每个数位设定的权重系数计算控制键:数位的顺序号 _______________________________ ---------------- ----------------------------------------------------------------------------------------------------- | | 1 | 2 | 3 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 || ___ ---------------- ----------------------------------------------------------------------------------------------------- | | 7 | 1 | 3 | | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | | ---------------- ----------------------------------------------------------------------------------------------------- |________ 权重系数

  4. 计算控制键的算法:6.1.控制键值设为零(K=0)。6.2.计算数位值乘以相应的权重系数的乘积。6.3.计算得到的乘积的最低位数的总和。6.4.将计算出的总和的最低位乘以 3。控制键(K)的值取为得到的乘积的最低位。

  5. 检查控制键正确性的算法:7.1.考虑控制键,计算数位值乘以相应的权重系数的乘积。7.2.计算得到的乘积的最低位数的总和。如果得到的总和是 10 的倍数(最低位等于 0),则认为控制键正确。

  6. 如果个人账户号码的第六位有字母值(在使用清算货币的情况下),则该符号替换为相应的数字。

| 允许的第六位字母值 | A | B | C | E | H | K | M | P | T | X | | 个人账户号码 | | | | | | | | | | |

| 对应的数字 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

替换完成后,根据第6点和第7点进行计算和检查控制键的值。本规程自1998年1月1日起生效。本规程实施后,俄罗斯联邦银行信息化部门的N 16-5-2/1198号文件于1996年9月12日失效。请将本规程传达给俄罗斯联邦银行和信贷机构。

控制键计算示例

1. 控制键在代理账户中的计算示例

确定信用组织代理账户30101810K00000000746中的控制键(K)的值。该账户在拥有BIC 049805000的RKC上开设。

  1. 提取条件性RKC编号 - 005(BIC的5-6位,左补零)。
  2. 在代理账户编号中,控制键的值等于零(K=0) - 30101810000000000746。
  3. 确定条件性RKC编号的每一位与代理账户编号的对应位相乘的加权系数

_______ 条件性RKC编号(左补零)代理账户编号_______________________________________________ | ---------------- ----------------------------------------------------------------------------------------------------- | || 0 | 0 | 5 | | 3 | 0 | 1 | 0 | 1 | 8 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 4 | 6 || ---------------- ----------------------------------------------------------------------------------------------------- | | 7 | 1 | 3 | | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | | ---------------- ----------------------------------------------------------------------------------------------------- | | | 0 | 0 | 15 | | 21 | 0 | 3 | 0 | 1 | 24 | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 21 | 28 | 6 | | | ---------------- ----------------------------------------------------------------------------------------------------- | | 位数乘以对应的加权系数 | |______ 加权系数

  1. 计算得到的最小位数的乘积之和:5+1+3+1+4+7+1+8+6=36。
  2. 计算得到的和的最小位(6)乘以3(6*3=18)。得到乘积的最小位(8)作为控制键的值。代理账户编号 - 30101810800000000746。
  3. 控制键计算的正确性通过再次计算乘积的最小位数之和并考虑得到控制键的值来验证

| 0 | 0 | 5 | | 3 | 0 | 1 | 0 | 1 | 8 | 1 | 0 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 4 | 6 |

| 7 | 1 | 3 | | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 |

| 0 | 0 | 15 | | 21 | 0 | 3 | 0 | 1 | 24 | 7 | 0 | 24 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 21 | 28 | 6 |

|__________ 乘积的最小位数之和 = 5+1+3+1+4+7+4+1+8+6 = 40 _____________________________________________|

因为和的最小位等于0,控制键的计算是正确的。

2. 代理账户客户账户中的控制键计算示例

确定RKC客户账户40102810K00000010001中的控制键(K)的值。该账户在拥有BIC 040305000的RKC上开设。

  1. 提取条件性RKC编号 - 005(BIC的5-6位,左补零)。
  2. 在客户账户编号中,控制键的值等于零(K=0) - 40102810000000010001。
  3. 确定条件性RKC编号的每一位与客户账户编号的对应位相乘的加权系数

_______ 条件性RKC编号(左补零)客户账户编号_________________________________________________________ | ---------------- ----------------------------------------------------------------------------------------------------- | || 0 | 0 | 5 | | 4 | 0 | 1 | 0 | 2 | 8 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 || ---------------- ----------------------------------------------------------------------------------------------------- | | 7 | 1 | 3 | | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | | ---------------- ----------------------------------------------------------------------------------------------------- | | | 0 | 0 | 15 | | 28 | 0 | 3 | 0 | 2 | 24 | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 0 | 0 | 0 | 1 | | | ---------------- ----------------------------------------------------------------------------------------------------- | | 位数乘以对应的加权系数 | |______ 加权系数

  1. 计算获得乘积的最低位的和:5+8+3+2+4+7+7+1=37。
  2. 计算出的和的最低位(7)乘以3(7*3=21)。获得乘积的最低位(1)作为控制键的值。账户号 - 30101810100000000746。
  3. 控制键计算的正确性通过再次计算乘积的最小位数之和并考虑得到控制键的值来验证

| 0 | 0 | 5 | | 4 | 0 | 1 | 0 | 2 | 8 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |

| 7 | 1 | 3 | | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 |

| 0 | 0 | 15 | | 28 | 0 | 3 | 0 | 2 | 24 | 7 | 0 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 0 | 0 | 0 | 1 |

|__________ 乘积最低位的和 = 5+8+3+2+4+7+3+7+1 = 40 _______________________________________________|

因为和的最小位等于0,控制键的计算是正确的。

3. 客户信用机构账户中计算控制键的示例

确定信用机构客户账户40602810K00000000025的控制键(K)值。开设账户的信用机构具有049805746的BIC。

  1. 提取信用机构的条件号 - 746(BIC的7至9位)。
  2. 在账户号中将控制键的值(K=0)设为零 - 40602810000000000025。
  3. 确定条件号信用机构的每一位与账户号的相应权重系数的乘积

_______ 信用机构的条件号 账户号___________________________________________________________ | ---------------- ----------------------------------------------------------------------------------------------------- | || 7 | 4 | 6 | | 4 | 0 | 6 | 0 | 2 | 8 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 5 || ---------------- ----------------------------------------------------------------------------------------------------- | | 7 | 1 | 3 | | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | | ---------------- ----------------------------------------------------------------------------------------------------- | | 乘积的权重系数 | |______ 权重系数

  1. 计算获得乘积的最低位的和:9+4+8+8+8+2+4+7+4+5=59
  2. 计算出的和的最低位(9)乘以3(9*3=27)。获得乘积的最低位(7)作为控制键的值。账户号 - 40602810700000000025。
  3. 控制键计算的正确性通过再次计算乘积的最小位数之和并考虑得到控制键的值来验证

| 7 | 4 | 6 | | 4 | 0 | 6 | 0 | 2 | 8 | 1 | 0 | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 5 |

| 7 | 1 | 3 | | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 |

| 49 | 4 | 18 | | 28 | 0 | 18 | 0 | 2 | 24 | 7 | 0 | 21 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 0 | 0 | 14 | 5 |

|__________ 乘积最低位的和 = 9+4+8+8+8+2+4+7+1+4+5=60 ______________________________________________|

因为和的最小位等于0,控制键的计算是正确的。

4. 使用清算货币计算账户中控制键的示例

确定信用机构客户账户30114B84K00000000501的控制键(K)值。在该账户开设的信用机构具有044541312的BIC。

  1. 提取信用机构的条件号 - 312(BIC的7至9位)。
  2. 在对应账户号中将控制键的值(K=0)设为零,并根据第8条规则进行字母代码(B)的临时替换为相应的数字(1) - 30114184000000000501。
  3. 确定条件号信用机构的每一位与账户号的相应权重系数的乘积

_______ 信用机构条件编号 账户编号_____________________________________________ | ---------------- ----------------------------------------------------------------------------------------------------- | || 3 | 1 | 2 | | 3 | 0 | 1 | 1 | 4 | 1 | 8 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 1 || ---------------- ----------------------------------------------------------------------------------------------------- | | 7 | 1 | 3 | | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | | ---------------- ----------------------------------------------------------------------------------------------------- | | 对应权重系数的各数位乘积 | |______ 权重系数

  1. 计算得到的最小数位乘积之和:1+1+6+1+3+7+4+3+6+4+5+1=42。
  2. 计算得到的和的最小数位(2)乘以3(2*3=6)。得到的乘积的最小数位(6)作为校验键值。账户编号考虑将第6位表示为字母 - 30114B84600000000501。
  3. 校验键值的正确性通过再次计算乘积的最小数位之和,并考虑得到的校验键值和预先将字母符号替换为相应的数字来验证。

| 3 | 1 | 2 | | 3 | 0 | 1 | 1 | 4 | 1 | 8 | 4 | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 1 |

| 7 | 1 | 3 | | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 | 3 | 7 | 1 |

| 21 | 1 | 6 | | 21 | 0 | 3 | 7 | 4 | 3 | 56 | 4 | 18 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 15 | 0 | 1 |

|__________ 乘积最小数位之和 = 1+1+6+1+3+7+4+3+6+4+8+5+1 = 50 ________________________________________|

因为和的最小位等于0,控制键的计算是正确的。