Python实现统一社会信用代码合法性校验

1 统一代码的构成

1.1 结构

​ 统一代码由十八位的阿拉伯数字或大写英文字母(不使用I、O、Z、S、V)组成,包括第1位登记管理部门代码、第2位机构类别代码、第3位第8位登记管理机关行政区划码、第9位第17位主体标识码(组织机构代码)、第18位校验码五个部分。

1.2 代码及说明

1.2.1 第1位:登记管理部门代码

​ 登记管理部门代码使用阿拉伯数字或大写英文字母表示,登记管理部门代码标识如下:

djglbmdm={'1':'机构编制','2':'外交','3':'司法行政','4':'文化','5':'民政','6':'旅游','7':'宗教','8':'工会','9':'工商','A':'中央军委改革和编制办公室','N':'农业','Y':'其他'}

1.2.2 第2位:机构类别代码

​ 机构类别代码使用阿拉伯数字或大写英文字母表示,机构类别代码如下:

# 不同登记管理部门下相同机构类别代码代表的机构类别不同
jglbdm={'1':{'1':'机关','2':'事业单位','3':'编办直接管理机构编制的群众团体','9':'其他'},'2':{'1':'外国常驻新闻机构','9':'其他'},'3':{'1':'律师执业机构','2':'公证处','3':'基层法律服务所','4':'司法鉴定机构','5':'仲裁委员会','9':'其他'},'4':{'1':'外国在华文化中心','9':'其他'},'5':{'1':'社会团体','2':'民办非企业单位','3':'基金会','9':'其他'},'6':{'1':'外国旅游部门常驻代表机构','2':'港澳台地区旅游部门常驻内地(大陆)代表机构','9':'其他'},'7':{'1':'宗教活动场所','2':'宗教院校','9':'其他'},'8':{'1':'基层工会','9':'其他'},'9':{'1':'企业','2':'个体工商户','3':'农民专业合作社'},'A':{'1':'军队事业单位','9':'其他'},'N':{'1':'组级集体经济组织','2':'村级集体经济组织','3':'乡镇级集体经济组织','9':'其他'},'Y':{'1':''}}

1.2.3 第3位~第8位:登记管理机关行政区划码

​ 登记管理机关行政区划码使用阿拉伯数字表示。按照GB/T 2260编码。

1.2.4 第9位~第17位:主体标识码(组织机构代码)

​ 主体标识码使用阿拉伯数字或大写英文字母表示。按照GB 11714编码。

1.2.5 第18位:校验码

​ 校验码使用阿拉伯数字或大写英文字母表示。校验码计算方法参照GB/T 17710。
​ 校验码按式如下公式计算:
C18=31−MOD(∑i=117Ci×Wi,31)C_{18}=31-MOD(\sum_{i=1}^{17}C_{i}\times W_{i},31) C18​=31−MOD(i=1∑17​Ci​×Wi​,31)
​ 式中:
​ MOD(n,m) ——整数求余函数,例如:函数MOD(31,31)的值为0;

​ i ——代码字符 从左到右的位置序号;

​ Ci ——第i位置上的代码字符的值,字符对应的值如下:

dmci={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'G':16,'H':17,'J':18,'K':19,'L':20,'M':21,'N':22,'P':23,'Q':24,'R':25,'T':26,'U':27,'W':28,'X':29,'Y':30}

​ C18 ——校验码;

​ Wi ——第i位上的加权因子,Wi= MOD(3(i-1) ,31) ,加权因子如下:

# i 位置列表
i=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
# wi 位置对应的加权因子
wi=[1,3,9,27,19,26,16,17,20,29,25,13,8,24,10,30,28]

​ 当MOD函数值为1(即C18 = 30)时,校验码应用符号Y表示;当MOD函数值为0(即C18 = 31)时,校验码用0表示。

1.2.6 校验码计算方法实例

​ 某统一代码前17位为91350100M000100Y4,其第18位校验码可按下列步骤与方法计算。
​ 第一步:列出代码前17位字符位置序号i相对应的各个位置上的字符值Ci

# M:21,Y:30
ci=[9,1,3,5,0,1,0,0,21,0,0,0,1,0,0,30,4]

​ 第二步:列出与字符位置序号i相对应的加权因子值Wi

# wi 位置对应的加权因子
wi=[1,3,9,27,19,26,16,17,20,29,25,13,8,24,10,30,28]

​ 第三步:计算与字符位置序号i相对应的乘积Ci × Wi

# ci[j]*wi[j]
ciwi=[]
for j in range(0,17):ciwi.append(ci[j]*wi[j])

​ 第四步:计算级数之和。
∑i=117Ci×Wi=1640\sum_{i=1}^{17}C_{i}\times W_{i} =1640 i=1∑17​Ci​×Wi​=1640
​ 第五步:计算整数求余函数MOD。

​ 级数之和1640模31余28,即MOD(1640,31)值为28。

​ 第六步:求出校验码字符值。

​ C18=31-28=3

​ 第七步:查出校验码字符。

​ 校验码字符值18对应的字符为3,该统一代码为91350100M000100Y43

以上参考:中华人民共和国国家标准 GB 32100-2015《法人和其他组织统一社会信用代码编码规则》

2 Python代码实现


def check_social(code):#统一代码由十八位的阿拉伯数字或大写英文字母(不使用I、O、Z、S、V)组成valid_char='0123456789ABCDEFGHJKLMNPQRTUWXY'invlid_char='IOZSV'modulus=31if code is None or code.isspace():return False#位数校验 18 位if len(code)!=18:return Falsecodeu = code.upper()#含有不使用大写英文字母for i in invlid_char:if i in codeu:return False#不在有效字符范围内for i in code:if not(i in valid_char):return False#前两位登记管理部门代码和机构类别代码d_o_code=['11','12','13','19','21','29','31','32','33','34','35','39','41','49','51','52','53','59','61','62','69','71','72','79','81','89','91','92','93','A1','A9','N1','N2','N3','N9','Y1']if not(code[0:2] in d_o_code):return False#3-8位登记管理机关行政区划码先不检测了#9-17位主体标识码(组织机构代码)先不拿出来校验了#第18位校验码,这部分是关键#第i位置对应的加权因子wi=[1,3,9,27,19,26,16,17,20,29,25,13,8,24,10,30,28]#第i位置上的字符对应值corres_value={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'G':16,'H':17,'J':18,'K':19,'L':20,'M':21,'N':22,'P':23,'Q':24,'R':25,'T':26,'U':27,'W':28,'X':29,'Y':30}#前17位字符位置序号i相对应的各个位置上的字符值ci=[]for v in code[0:17]:j=corres_value.get(v)ci.append(j)#计算与字符位置序号i相对应的乘积ciwi=[]for i in range(len(ci)):ciwi.append(ci[i]*wi[i])#计算级数之和ciwi_sum=sum(ciwi)#级数之和求余,求出校验码字符值c18 = modulus-ciwi_sum % modulus#查出校验码字符if c18 == modulus:c18=0check_code=Nonefor k,v in corres_value.items():if v == c18:check_code=kbreakif check_code==code[17]:return Trueelse:return False

3 未检测部分

3.1 管理部门行政区划代码

​ 全国行政区划代码比较多,在本文实现代码中就没有做校验。

3.2 组织机构代码

​ 组织机构代码也有待定的规则,本文实现代码中没有做校验,有兴趣的可做补充!

Python实现统一社会信用代码合法性校验相关推荐

  1. Python实现统一社会信用代码校验(GB32100-2015)

    Python实现统一社会信用代码校验 统一社会信用代码国标校验 统一社会信用代码国标校验规则 示例说明 Python代码实现(仅实现GB- 32100-2015中的规则) 统一社会信用代码国标校验   ...

  2. 计算统一社会信用代码的校验码(Lua)

    输入 法人和其他组织统一社会信用代码的前16/17位 输出 检查登记管理部门代码(第1位)和机构类别代码(第2位)是否合法: 检查登记管理机关行政区划码(第3-8位)是否合法: 检查组织机构代码的本体 ...

  3. 身份证号与统一社会信用代码的校验

    身份证号与统一社会信用代码的表单校验 一.校验身份证号 <el-form ref="form" :model="form" :rules="ru ...

  4. 统一社会信用代码c#校验函数

    以下代码主要用于校验社会统一信用代码的合法性 public static bool CheckSocialCreditCode(string code) {if (code?.Length != 18 ...

  5. 全网唯一正确身份证和社统一社会信用代码自定义表单校验器(身份证校验和社统一社会信用代码校验)

    话不多说,直入正题: 1.工具类: import * as moment from 'moment'; import {isUndefined} from 'util'; import {Abstra ...

  6. JS实现统一社会信用代码的效验(组织机构代码效验)

    参考原文https://blog.csdn.net/hdhxby/article/details/56015370 部分错误,修改整合了下 想查询数据的,请点击:统一信用代码查询地址 查看效验规则点击 ...

  7. JAVA生成统一社会信用代码和组织机构代码

    统一社会信用代码规则如下: 代码如下: 引入jar包下载:https://mvnrepository.com/artifact/cn.hutool/hutool-all/5.8.3 package c ...

  8. python结合正则表达式及校验码生成算法校验:电话号码、营业执照、组织机构代码证、税务登记证、统一社会信用代码证、非盈利性企业登记证号码的函数

    #!/usr/bin/env python3 import re from datetime import datetimedef check_phone(phone):'''三大运营商和虚拟运营商的 ...

  9. 身份证号码及统一社会信用代码校验

    /** * 身份证号码验证 * rule为form表单当前验证的filed对应的验证rule规则 * value为当前输入框返回值 * callback为回调函数,验证成功直接回调,验证失败回调函数返 ...

最新文章

  1. Markdown中希腊字母与代码对应表
  2. cayenne:用于随机模拟的Python包
  3. HDU5187 zhx#39;s contest(计数问题)
  4. python最好用的助手_推荐5款好用的Python工具
  5. hive动态分区shell_hive-shell批量操作分区文件
  6. diff git 指定时间_Git 自救指南
  7. MathType中如何快速输入空心字母
  8. 给定一个数跟数组,将小于等于该数的数组元素放在左边,将大于该数的数组元素放在右边...
  9. 刘宇凡:苍井空卖内衣 典型的情怀产品
  10. 如何修改电脑的MAC地址(手把手更改)
  11. 宇枫资本理财中要避免这些
  12. 基于java的企业信息网站发系统
  13. cs系统如何上云服务器,cs架构程序怎么连接云服务器
  14. c语言提取字符串里面的数字,一个截取字符串中数字的函数
  15. 【音频处理】视频加速音频不变调
  16. Android LogCat使用详解
  17. Linux 实战技巧 --vi/vim 的使用
  18. 表面增强拉曼光谱(SERS)基底的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 【GCN-RS】多行为推荐:Multi-behavior Recommendation with Graph Convolutional Networks (SIGIR‘20)
  20. 腾讯云部署homeassistant踩坑记录

热门文章

  1. 用计算机表白我不喜欢你了,“我喜欢你”用文言文怎么说?拿这3句去表白,男生不忍心拒绝你!...
  2. 电子科技大学计算机科学与技术考研复试,电子科技大学计算机科学与工程学院2021考研招生复试工作安排...
  3. Studio 3T for MongoDB 破解无限使用脚本
  4. Using的三种使用方法
  5. 快手提前批--Java开发面经
  6. Candide3人脸动画模型
  7. 信息收集之通过JS拓展信息面
  8. 音质好的蓝牙耳机有哪些?音质好的蓝牙耳机测评
  9. Red Hat Ubuntu Centos 更改登录横幅
  10. mysql 1452 Cannot add or update a child row: a foreign key constraint fails