统一社会信用代码校验

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


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

使用场景

1.收集与公司合作的经销商公司信息,比如公司名称、法人代表、统一社会信用代码等,因为社会信用代码有18位,经常会有写错的情况,所以需要校验填写的信用代码是否是正确的。

2.开发票,填写公司名称和税号,税号长,易出错,用校验来验证信用代码的正确性,避免一些不必要的麻烦。

3.查询企业信息,用信用代码来查询对应企业的基本信息。


检验规则

国家发布了强制性国家标准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减去该余数得出校验码字符数值,

公式: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)设置表单校验,公式:判断信用代码是否正确==‘统一社会信用代码格式正确’

本文是否对您有帮助?
 有帮助
 没帮助
您是否遇到了以下问题?
如需获取即时帮助,请联系技术支持