Python实现统一社会信用代码合法性校验
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∑17Ci×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∑17Ci×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实现统一社会信用代码合法性校验相关推荐
- Python实现统一社会信用代码校验(GB32100-2015)
Python实现统一社会信用代码校验 统一社会信用代码国标校验 统一社会信用代码国标校验规则 示例说明 Python代码实现(仅实现GB- 32100-2015中的规则) 统一社会信用代码国标校验 ...
- 计算统一社会信用代码的校验码(Lua)
输入 法人和其他组织统一社会信用代码的前16/17位 输出 检查登记管理部门代码(第1位)和机构类别代码(第2位)是否合法: 检查登记管理机关行政区划码(第3-8位)是否合法: 检查组织机构代码的本体 ...
- 身份证号与统一社会信用代码的校验
身份证号与统一社会信用代码的表单校验 一.校验身份证号 <el-form ref="form" :model="form" :rules="ru ...
- 统一社会信用代码c#校验函数
以下代码主要用于校验社会统一信用代码的合法性 public static bool CheckSocialCreditCode(string code) {if (code?.Length != 18 ...
- 全网唯一正确身份证和社统一社会信用代码自定义表单校验器(身份证校验和社统一社会信用代码校验)
话不多说,直入正题: 1.工具类: import * as moment from 'moment'; import {isUndefined} from 'util'; import {Abstra ...
- JS实现统一社会信用代码的效验(组织机构代码效验)
参考原文https://blog.csdn.net/hdhxby/article/details/56015370 部分错误,修改整合了下 想查询数据的,请点击:统一信用代码查询地址 查看效验规则点击 ...
- JAVA生成统一社会信用代码和组织机构代码
统一社会信用代码规则如下: 代码如下: 引入jar包下载:https://mvnrepository.com/artifact/cn.hutool/hutool-all/5.8.3 package c ...
- python结合正则表达式及校验码生成算法校验:电话号码、营业执照、组织机构代码证、税务登记证、统一社会信用代码证、非盈利性企业登记证号码的函数
#!/usr/bin/env python3 import re from datetime import datetimedef check_phone(phone):'''三大运营商和虚拟运营商的 ...
- 身份证号码及统一社会信用代码校验
/** * 身份证号码验证 * rule为form表单当前验证的filed对应的验证rule规则 * value为当前输入框返回值 * callback为回调函数,验证成功直接回调,验证失败回调函数返 ...
最新文章
- Markdown中希腊字母与代码对应表
- cayenne:用于随机模拟的Python包
- HDU5187 zhx#39;s contest(计数问题)
- python最好用的助手_推荐5款好用的Python工具
- hive动态分区shell_hive-shell批量操作分区文件
- diff git 指定时间_Git 自救指南
- MathType中如何快速输入空心字母
- 给定一个数跟数组,将小于等于该数的数组元素放在左边,将大于该数的数组元素放在右边...
- 刘宇凡:苍井空卖内衣 典型的情怀产品
- 如何修改电脑的MAC地址(手把手更改)
- 宇枫资本理财中要避免这些
- 基于java的企业信息网站发系统
- cs系统如何上云服务器,cs架构程序怎么连接云服务器
- c语言提取字符串里面的数字,一个截取字符串中数字的函数
- 【音频处理】视频加速音频不变调
- Android LogCat使用详解
- Linux 实战技巧 --vi/vim 的使用
- 表面增强拉曼光谱(SERS)基底的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 【GCN-RS】多行为推荐:Multi-behavior Recommendation with Graph Convolutional Networks (SIGIR‘20)
- 腾讯云部署homeassistant踩坑记录
热门文章
- 用计算机表白我不喜欢你了,“我喜欢你”用文言文怎么说?拿这3句去表白,男生不忍心拒绝你!...
- 电子科技大学计算机科学与技术考研复试,电子科技大学计算机科学与工程学院2021考研招生复试工作安排...
- Studio 3T for MongoDB 破解无限使用脚本
- Using的三种使用方法
- 快手提前批--Java开发面经
- Candide3人脸动画模型
- 信息收集之通过JS拓展信息面
- 音质好的蓝牙耳机有哪些?音质好的蓝牙耳机测评
- Red Hat Ubuntu Centos 更改登录横幅
- mysql 1452 Cannot add or update a child row: a foreign key constraint fails