统一社会信用代码校验

本文以「统一社会信用代码校验」为例,配合模板阅读效果更佳。点击安装模板

统一社会信用代码相当于让法人和其他组织拥有了一个全国统一的“身份证号”,这类社会信用代码是可以根据固定的公式来判断是否正确。

使用场景

  • 收集与公司合作的经销商公司信息,比如公司名称、法人代表、统一社会信用代码等,因为社会信用代码有18位,经常会有写错的情况,所以需要校验填写的信用代码是否是正确的。
  • 开发票,填写公司名称和税号,税号长,易出错,用校验来验证信用代码的正确性,避免一些不必要的麻烦。
  • 查询企业信息,用信用代码来查询对应企业的基本信息。

检验规则

国家发布了强制性国家标准GB32100—2015《法人和其他组织统一社会信用代码编码规则》,其中第18位校验算法如下:

信用代码总共是 18 位,需要对信用代码的第 1~17 位进行上面的公式计算得出第18位的数值,再与填写的信用代码第18位进行比较,若是一致,则信用代码正确,反之则不正确。

统一社会信用代码由数字和英文字母组合成的 18 位字符,每位代码字符对应代码字符数值如下图:

设计思路

将信用代码的 1~18 位字符分别取出,并分别得出对应的字符数值 Ci,对每一位的字符数值计算加权因子 Wi(3i-1 和 31 相除取余),计算得出Ci*Wi所有的数值之和后,与31相除取余数,再用 31 减去余数之后得出第 18 位的数值,将最后得出的数值与一开始取出的信用代码进行相比较,相符信用代码正确,否则信用代码不正确。

实现步骤

1.建立两张表单:信用代码总表、信用代码输入表

信用代码输入表使用外链:访问外链

2.信用代码总表:

代码字符:单行文本,代码字符数值:数字字段。将信用代码字符和信用代码数值分别导入对应的数据。

3.信用代码输入表

(1)信用代码:单行文本,不做任何设置

(2)Ci:子表单。

(3)取第1位:单行文本,取出信用代码的对应位数的字符,MID(信用代码,1,1) (取第1位、取第2位…取第18位字段都是一样的逻辑,分别取出对应位置的字符)

(4)设置联动

Ci子表单中的1~18:数字字段,设置数据联动,联动表单信用代码总表,条件是取第1位=代码字符,联动出对应的代码数值(1、2、3…18字段都是一样的逻辑,数据联动出对应的代码数值)

(5)Wi:子表单

(6)Wi子表单中的1~17:数字字段,计算3的幂次方3i-1,i代表的是信用代码的第几位字符,i不断累加,i-1是从0开始,用POWER函数,然后与31计算出余数,公式:MOD(POWER(3,0),31)

(7)校验码字符数值:数字字段,将Ci和Wi对应的位数都相乘之后相加,然后与31相除得出余数,再用31减去该余数得出校验码字符数值,公式设置为:

IF(31-MOD(SUMPRODUCT([Ci.1,Ci.2,Ci.3,Ci.4,Ci.5,Ci.6,Ci.7,Ci.8,Ci.9,Ci.10,Ci.11,Ci.12,Ci.13,Ci.14,
Ci.15,Ci.16,Ci.17],[Wi.1,Wi.2,Wi.3,Wi.4,Wi.5,Wi.6,Wi.7,Wi.8,Wi.9,Wi.10,Wi.11,Wi.12,Wi.13,Wi.14,
Wi.15,Wi.16,Wi.17]),31)==31,0,31-MOD(SUMPRODUCT([Ci.1,Ci.2,Ci.3,Ci.4,Ci.5,Ci.6,Ci.7,Ci.8,Ci.9,
Ci.10,Ci.11,Ci.12,Ci.13,Ci.14,Ci.15,Ci.16,Ci.17],[Wi.1,Wi.2,Wi.3,Wi.4,Wi.5,Wi.6,Wi.7,Wi.8,Wi.9,
Wi.10,Wi.11,Wi.12,Wi.13,Wi.14,Wi.15,Wi.16,Wi.17]),31))

(8)判断信用代码是否正确:单行文本,公式:IF(Ci.18==校验码字符数值,‘统一社会信用代码格式正确’,‘统一社会信用代码格式不正确’)

(9)设置表单校验,公式:判断信用代码是否正确==‘统一社会信用代码格式正确’

文档内容是否对您有帮助?
有帮助
没帮助没帮助
如需获取即时帮助,请联系技术支持
咨询
扫码领取100+零代码资料简道云官方微信号400-111-0890
图标在线咨询
立即体验