利用简道云实现社会信用代码校验

楼主
我是社区第228202位番薯,欢迎点我头像关注我哦~
统一社会信用代码相当于让法人和其他组织拥有了一个全国统一的“身份证号”,这类社会信用代码是可以根据固定的公式来判断是否正确。
使用场景:
1.需要收集与公司合作的经销商公司信息,比如公司名称、法人代表、统一社会信用代码等,因为社会信用代码有18位,经常会有写错的情况,所以需要校验填写的信用代码是否是正确的。
2.开发票,填写公司名称和税号,税号长,易出错,用校验来验证信用代码的正确性,避免一些不必要的麻烦。
3.查询企业信息,用信用代码来查询对应企业的基本信息。
背景:国家发布了强制性国家标准GB32100—2015《法人和其他组织统一社会信用代码编码规则》,其中第18位校验算法如下:

信用代码总共是18位,需要对信用代码的第1~17位进行上面的公式计算得出第18位的数值,再与填写的信用代码第18位进行比较,若是一致,则信用代码正确,反之则不正确。      
   
统一社会信用代码字符中包含英文字母,每位代码字符对应代码字符数值如左图。
设计思路:
将信用代码的1~18位字符分别取出,并分别得出对应的字符数值Ci,对每一位的字符数值计算加权因子Wi(3i-1和31相除取余),计算得出Ci*Wi所有的数值之和后,与31相除取余数,再用31减去余数之后得出第18位的数值,将最后得出的数值与一开始取出的信用代码进行相比较,相符信用代码正确,否则信用代码不正确。
实现步骤:
1.建立两张表单:信用代码总表、信用代码输入表
信用代码输入表外链:https://link.jiandaoyun.com/f/5cf6236a995a0f4a6669affd

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















分享扩散:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表