当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS-------18位社会信用代码验证

iOS-------18位社会信用代码验证

2018年03月12日  | 移动技术网IT编程  | 我要评论

好看的同人动漫,魔力水滴,回复函

iOS-------18位社会信用代码验证!

先介绍一下验证规则:
从2015年10月1日后,中国企业营业执照上会印有“统一社会信用代码”。这新版本的营业执照将取代以前发的营业执照、组织机构代码证、税务登记证。统称“三证合一“。这也意味着申请办理新企业时,只需取得营业执照即可。另外,提供企业证明时,只需提交营业执照即可,无须再提交组织机构代码证和税务登记证。
而“统一社会信用代码”实际上编码规则采用GB 32100-2015 《法人和其他组织统一社会信用代码编码规则》而来,此规则从2015年10月1日起,正式实施。
  下面是《法人和其他组织统一社会信用代码编码规则》的说明。
  1 范围
  本标准规定了法人和其他组织统一社会信用代码(以下简称统一代码)的术语和定义、构成。本标准适用于对统一代码的编码、信息处理和信息共享交换。
  2 规范性引用文件
  下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
  GB/T 2260 中华人民共和国行政区划代码GB 11714 全国组织机构代码编制规则GB/T 17710 信息技术 安全技术 校验字符系统
  3 术语和定义
  下列术语和定义适用于本文件。
  3.1 组织机构 organization
  企业、事业单位、机关、社会团体及其他依法成立的单位的通称。[GB/T 20091-2006, 定义2.2]
  3.2 法人 legal entities
  具有民事权利能力和民事行为能力,依法独立享有民事权利和承担民事义务的组织。
  3.3 其他组织 other organizations
  合法成立、有一定的组织机构和财产,不具备法人资格的组织。
  3.4 组织机构代码 organization code
  主体标识码 subject identification code按照GB 11714编制,赋予每一个组织机构在全国范围内唯一的,始终不变的识别标识码。
  3.5 统一社会信用代码 unified social credit identifier
  每一个法人和其他组织在全国范围内唯一的,终身不变的法定身份识别码。
  4 统一代码的构成
  4.1 结构
  统一代码由十八位的阿拉伯数字或大写英文字母(不使用I、O、Z、S、V)组成。
  第1位:登记管理部门代码(共一位字符)第2位:机构类别代码(共一位字符)第3位~第8位:登记管理机关行政区划码(共六位阿拉伯数字)第9位~第17位:主体标识码(组织机构代码)(共九位字符)第18位:校验码(共一位字符)
  4.2 代码及说明
  登记管理部门代码:使用阿拉伯数字或大写英文字母表示。
  机构编制:1 、民政:5、工商:9、其他:Y
  机构类别代码:使用阿拉伯数字或大写英文字母表示。
  机构编制机关:11打头机构编制事业单位,12打头机构编制中央编办直接管理机构编制的群众团体,13打头机构编制其他,19打头民政社会团体,51打头民政民办非企业单位,52打头民政基金会,53打头民政其他,59打头工商企业,91打头工商个体工商户,92打头工商农民专业合作社,93打头其他,Y1打头
  登记管理机关行政区划码:只能使用阿拉伯数字表示。按照GB/T 2260编码。
  主体标识码(组织机构代码):使用阿拉伯数字或英文大写字母表示。按照GB 11714编码。
  在实行统一社会信用代码之前,以前的组织机构代码证上的组织机构代码由九位字符组成。格式为XXXXXXXX-Y。前面八位被称为“本体代码”;最后一位被称为“校验码”。校验码和本体代码由一个连字号(-)连接起来。以便让人很容易的看出校验码。但是三证合一后,组织机构的九位字符全部被纳入统一社会信用代码的第9位至第17位,其原有组织机构代码上的连字号不带入统一社会信用代码。
  原有组织机构代码上的“校验码”的计算规则是:
  例如:某公司的组织机构代码是:59467239-9。那其最后一位的组织机构代码校验码9是如何计算出来的呢?
  第一步:取组织机构代码的前八位本体代码为基数。5 9 4 6 7 2 3 9提示:如果本体代码中含有英文大写字母。则A的基数是10,B的基数是11,C的基数是12,依此类推,直到Z的基数是35。
  第二步:取加权因子数值。因为组织机构代码的本体代码一共是八位字符。则这八位的加权因子数值从左到右分别是:3、7、9、10、5、8、4、2。
第三步:本体代码基数与对应位数的因子数值相乘。5×3=15,9×7=63,4×9=36,6×10=60,7×5=35,2×8=16,3×4=12,9×2=18第四步:将乘积求和相加。15+63+36+60+35+16+12+18=255第五步:将和数除以11,求余数。255&pide;11=33,余数是2。第六步:用阿拉伯数字11减去余数,得求校验码的数值。当校验码的数值为10时,校验码用英文大写字母X来表示;当校验码的数值为11时,校验码用0来表示;其余求出的校验码数值就用其本身的阿拉伯数字来表示。11-2=9,因此此公司完整的组织机构代码为 59467239-9。
新社会统一信用代码的“校验位”计算规则是:
  校验码:使用阿拉伯数字或大写英文字母来表示。校验码的计算方法参照 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;

}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • ios uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网