“我正在参加「启航方案」”
引言
需求:商户进件的子模块证件信息页面新增营业执照编号校验
非小微商户,证件信息需要录入营业执照号
I、商户进件新增营业执照编号校验
从2015年10月1日后,中国企业营业执照上会印有“一致社会信誉代码”。这新版本的营业执照将取代以前发的营业执照、安排安排代码证、税务挂号证。总称“三证合一“。
1、申请办理新企业时,只需获得营业执照即可。 2、供给企业证明时,只需提交营业执照即可,无须再提交安排安排代码证和税务挂号证。
而“一致社会信誉代码”实际上编码规矩选用 GB 32100-2015 《法人和其他安排一致社会信誉代码编码规矩》
而来,此规矩从2015年10月1日起,正式施行。
www.sac.gov.cn/gzfw/ggcx/g…
1.1 【需求背景】
18位编码的校验依据GB 32100-2015 《法人和其他安排一致社会信誉代码编码规矩》, 一致代码由十八位阿拉伯数字或大写英文字母(不运用I、O、Z、S、V)组成,包含以下5个部分
第1位挂号办理部门代码 第2位安排类别代码
第3位~第8位挂号办理机关行政区划码
第9位~第17位主体标识码(安排安排代码)
第18位校验码
1.2 【需求描绘】
商户进件(新增、审阅经过前修改),如营业执照号必填则对营业执照编号进行校验是否存在“I、O、Z、S、V”
,如存在,则提示“营业执照编号不运用字母“I、O、Z、S、V”,请承认修改后提交!”
1.3 术语和界说
安排安排 organization
企业、事业单位、机关、社会团体及其他依法建立的单位的通称。[GB/T 20091-2006, 界说2.2]
法人 legal entities
具有民事权利能力和民事行为能力,依法独立享有民事权利和承担民事责任的安排。
其他安排 other organizations
合法建立、有必定的安排安排和产业,不具备法人资格的安排。
安排安排代码 organization code
主体标识码 subject identification code依照GB 11714编制,赋予每一个安排安排在全国范围内唯一的,始终不变的识别标识码。
一致社会信誉代码 unified social credit identifier
每一个法人和其他安排在全国范围内唯一的,终身不变的法定身份识别码。
1.4 一致代码的构成(unified identifier)
一致代码由十八位的阿拉伯数字或大写英文字母(不运用I、O、Z、S、V)组成。
第1位:挂号办理部门代码(共一位字符) 第2位:安排类别代码(共一位字符)
第3位~第8位:
挂号办理机关行政区划码(共六位阿拉伯数字)第9位~第17位
:主体标识码(安排安排代码)(共九位字符) 第18位:校验码(共一位字符)
1.5 代码及说明
- 挂号办理部门代码:运用阿拉伯数字或大写英文字母表明。
挂号办理部门 | 代码标识 |
---|---|
安排编制 | 1 |
交际 | 2 |
司法行政 | 3 |
文化 | 4 |
民政 | 5 |
旅行 | 6 |
宗教 | 7 |
工会 | 8 |
工商 | 9 |
中央军委改革和编制办公室 | A |
农业 | N |
其他 | Y |
- 安排类别代码:运用阿拉伯数字或大写英文字母表明。
挂号办理部门
|
安排类别
|
代码标识
|
---|---|---|
安排编制
|
机关
|
1
|
事业单位
|
2
|
|
编办直接办理安排编制的群众团体
|
3
|
|
其他
|
9
|
|
交际
|
外国常驻新闻安排
|
1
|
其他
|
9
|
|
司法行政
|
律师执业安排
|
1
|
公证处
|
2
|
|
基层法令服务所
|
3
|
|
司法鉴定安排
|
4
|
|
仲裁委员会
|
5
|
|
其他
|
9
|
|
文化
|
外国在华文化中心
|
1
|
其他
|
9
|
|
民政
|
社会团体
|
1
|
民办非企业单位
|
2
|
|
基金会
|
3
|
|
其他
|
9
|
|
旅行
|
外国旅行部门常驻代表安排
|
1
|
港澳台地区旅行部门常驻内地(大陆)代表安排
|
2
|
|
其他
|
9
|
|
宗教
|
宗教活动场所
|
1
|
宗教院校
|
2
|
|
其他
|
9
|
|
工会
|
基层工会
|
1
|
其他
|
9
|
|
工商
|
企业
|
1
|
个体工商户
|
2
|
|
农民专业合作社
|
3
|
|
中央军委改革和编制办公室
|
军队事业单位
|
1
|
其他
|
9
|
|
农业
|
组级团体经济安排
|
1
|
村级团体经济安排
|
2
|
|
乡镇级团体经济安排
|
3
|
|
其他
|
9
|
|
其他
|
1
|
-
第3位~8位:
挂号办理机关行政区划码
只能运用阿拉伯数字表明。依照GB/T 2260编码。 -
第9位~17位:
主体标识码(安排安排代码)
运用阿拉伯数字或英文大写字母表明。依照GB 11714编码。 -
校验码
在实施一致社会信誉代码之前,以前的安排安排代码证上的安排安排代码由九位字符组成。格局为XXXXXXXX-Y。前面八位被称为“本体代码”;最终一位被称为“校验码”。校验码和本体代码由一个连字号(-)衔接起来。以便让人很容易的看出校验码。
但
是三证合一后,安排安排的九位字符悉数被纳入一致社会信誉代码的第9位至第17位,其原有安排安排代码上的连字号不带入一致社会信誉代码。 1、原有安排安排代码上的“校验码”的核算规矩:
例如:某公司的安排安排代码是:59467239-9。那其最终一位的安排安排代码校验码9是怎么核算出来的? 第一步:取安排安排代码的前八位本体代码为基数。5 9 4 6 7 2 3 9提示:假如本体代码中含有英文大写字母。则A的基数是10,B的基数是11,C的基数是12,依此类推,直到Z的基数是35。即选用16进制编码 进行核算
第二步:取加权因子数值。由于安排安排代码的本体代码一共是八位字符。则这八位的加权因子数值从左到右分别是:3、7、9、10、5、8、4、2。 第三步:本体代码基数与对应位数的因子数值相乘。53=15,97=63,49=36,610=60,75=35,28=16,34=12,92=18 第四步:将乘积求和相加。15+63+36+60+35+16+12+18=255 第五步:将和数除以11,求余数。25511=33,余数是2。 第六步:用阿拉伯数字11减去余数,得求校验码的数值。当校验码的数值为10时,校验码用英文大写字母X来表明;当校验码的数值为11时,校验码用0来表明;其他求出的校验码数值就用其本身的阿拉伯数字来表明。11-2=9,因此此公司完好的安排安排代码为 59467239-9。
2、
新社会一致信誉代码的“校验位”核算规矩是:
校验码:运用阿拉伯数字或大写英文字母来表明。校验码的核算方法参照 GB/T 17710。
II、iOS代码完成
2.1 简单校验字母
- 用法
if (!self.isMicro_Merchants && _zzbhTextF.text.length < 1) {
return [SVProgressHUD showInfoWithStatus:@"请输入营业执照编号"];
}
if (!self.isMicro_Merchants && _zzbhTextF.text.length >= 1) {
// // 判别营业执照号,校验是否存在“I、O、Z、S、V”,如存在,则提示“营业执照编号不运用字母“I、O、Z、S、V”,请承认修改后提交!”
//
if([idNumberTool isInvalidbusiness_license_idNumber:_zzbhTextF.text]){
return [SVProgressHUD showInfoWithStatus:@"营业执照编号不运用字母“I、O、Z、S、V”,请承认修改后提交!"];
}
}
- 代码完成
@interface idNumberTool : NSObject
/**
商户进件(新增、审阅经过前修改),如营业执照号必填则对营业执照编号进行校验是否存在“I、O、Z、S、V”,如存在,则提示“营业执照编号不运用字母“I、O、Z、S、V”,请承认修改后提交!”
*/
+(BOOL)isInvalidbusiness_license_idNumber:(NSString*)idNumber;
@end
//
// idNumberTool.m
// Housekeeper
//
// Created by mac on 2021/5/8.
// Copyright 2021 https://kunnan.blog.csdn.net/ . All rights reserved.
//
#import "idNumberTool.h"
@implementation idNumberTool
/**
商户进件(新增、审阅经过前修改),如营业执照号必填则对营业执照编号进行校验是否存在“I、O、Z、S、V”,如存在,则提示“营业执照编号不运用字母“I、O、Z、S、V”,请承认修改后提交!”
*/
+(BOOL)isInvalidbusiness_license_idNumber:(NSString*)idNumber{
if(idNumber.length<1){
return NO;
}
return [self isTrueRule4SNWithRuleStrArr:@[@"I",@"i",@"O",@"o",@"Z",@"z",@"S",@"s",@"V",@"v"] target:idNumber];
}
/**
RuleStr:@ "||,,\r\n"
案例:iOS分配终端界面功能完成:1、拆分SN 2、核算SN个数( 号段用‘-’衔接;每批号段请用‘,’|‘离隔或分行)
//————————————————
//版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵从CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/z929118967/article/details/116303608
*/
+ (BOOL)isTrueRule4SNWithRuleStrArr:(NSArray*)RuleStr target:(NSString*)event {
for (NSString* line in RuleStr) {
if( [event containsString:line]){
NSLog(@"line:%@",line);
return YES;
}
}
return NO;
}
@end
2.2 严格依照18位社会信誉代码生成规矩验证(GB/T 17710)
判别是否为社会信誉代码
+ (BOOL)isSocialCredit18Number:(NSString *)socialCreditNum
{
if(socialCreditNum.length != 18){
return NO;
}
NSString *scN = @"^([0-9ABCDEFGHJKLMNPQRTUWXY]{2})([0-9]{6})([0-9ABCDEFGHJKLMNPQRTUWXY]{9})([0-9Y])$";
NSPredicate *regextestSCNum = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", scN];
if (![regextestSCNum evaluateWithObject:socialCreditNum]) {
return NO;
}
NSArray *ws = @[@1,@3,@9,@27,@19,@26,@16,@17,@20,@29,@25,@13,@8,@24,@10,@30,@28];
NSDictionary *zmDic = @{@"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};
NSMutableArray *codeArr = [NSMutableArray array];
NSMutableArray *codeArr2 = [NSMutableArray array];
codeArr[0] = [socialCreditNum substringWithRange:NSMakeRange(0,socialCreditNum.length-1)];
codeArr[1] = [socialCreditNum substringWithRange:NSMakeRange(socialCreditNum.length-1,1)];
int sum = 0;
for (int i = 0; i < [codeArr[0] length]; i++) {
[codeArr2 addObject:[codeArr[0] substringWithRange:NSMakeRange(i, 1)]];
}
NSScanner* scan;
int val;
for (int j = 0; j < codeArr2.count; j++) {
scan = [NSScanner scannerWithString:codeArr2[j]];
if (![scan scanInt:&val] && ![scan isAtEnd]) {
codeArr2[j] = zmDic[codeArr2[j]];
}
}
for (int x = 0; x < codeArr2.count; x++) {
sum += [ws[x] intValue]*[codeArr2[x] intValue];
}
int c18 = 31 - (sum % 31);
for (NSString *key in zmDic.allKeys) {
if (zmDic[key]==[NSNumber numberWithInt:c18]) {
if (![codeArr[1] isEqualToString:key]) {
return NO;
}
}
}
return YES;
}
see also
公号:iOS逆向
iOS 银行卡号有效性校验Luhn算法 (银行卡号码校验算法) & 身份证校验:【校验年龄、校验是否符合身份证号生成规矩】 | 蓄力方案
kunnan.blog.csdn.net/article/det…
案例:iOS分配终端界面功能完成
1、拆分SN 2、核算SN个数( 号段用‘-’衔接;每批号段请用‘,’|‘离隔或分行)
RuleStr:@ "||,,\r\n"
———————————————— 版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵从CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/z929118967/…