iOS 身份证号码校验

问题:身份证校验

最近在公司项目中遇到身份证号码校验的问题,按照之前经验都是直接撸袖子上正则匹配,简单粗暴出成果。

1、15位或18位,如果是15位,必需全是数字。
2、如果是18位,最后一位可以是数字或字母Xx,其余必需是数字。

5位数身份证验证正则表达式:
isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/; 

18位数身份证验证正则表达式 :
isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;

15/18位数身份证验证正则表达式 :
isIDCard3=/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/

但是这样,会有问题就是:不精准,简单改变其中的几个值,仍然可以通过,可是这个身份证号其实可能是不存在的。

要求:精准

由于是金融类项目,对身份证要求比较精确。现在老板不满意了,要求必须是正确的身份证号。

背景

于是去查询了相关资料

这里我们只考虑二代身份证,即18位(15位的估计也没人用了)。

新的二代公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。

其含义如下:

  1. 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
  2. 出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日分别用4位、2位、2位数字表示,之间不用分隔符。
  3. 顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
  4. 校验码:这个是根据前17位,加权求和,对11求余,在对应得到相应的值。

有了这个就简单多了,只要先用正则过滤一遍,在用校验码算法验证,基本就可以了。而且,有需要的话,甚至可以根据这个逆推出用户的出生日期,性别,地址。

校验码计算方式

校验的计算方式:

  1. 对前17位数字本体码加权求和
公式为:S = Sum(Ai * Wi), i = 0, ... , 16。
其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子
其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
  1. 以11对计算结果取模
    Y = sum % 11

  2. 根据模的值得到对应的校验码
    对应关系为:

 Y值:   0 1 2 3 4 5 6 7 8 9 10
 校验码: 1 0 X 9 8 7 6 5 4 3 2

代码

由于是为了做项目,目前只有OC版本的。后期看情况有时间在加上swift的和C语言版本。

- (BOOL)isValidWithIdentityNum:(NSString *)IdentityNum{
   //先正则匹配
  //......
  
  
   //计算最后一位余数
   NSArray *arrExp = [NSArray arrayWithObjects:@"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2", nil];
   NSArray *arrVaild = [NSArray arrayWithObjects:@"1", @"0", @"X", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2", nil];
   
   long sum = 0;
   for (int i = 0; i < (IdentityNum.length -1); i++) {
       NSString * str = [IdentityNum substringWithRange:NSMakeRange(i, 1)];
       sum += [str intValue] * [arrExp[i] intValue];
   }
   
   int idx = (sum % 11);
   if ([arrVaild[idx] isEqualToString:[IdentityNum substringWithRange:NSMakeRange(IdentityNum.length - 1, 1)]]) {
       return YES;
   }else{
       return NO;
   }
   
   
   
   return YES;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 为什么有的人身份证最后一位的号码是0、1或2、3、4、5、6、7、8、9或X,而有的人是X这是怎么回事的呢,又有多...
    吴富良阅读 7,427评论 0 1
  • 申明:本文除特别说明外,身份证号码专指18位公民身份号码 一、身份证号码结构 早期‘身份证号码’叫‘社会保障号’,...
    安东的漫长岁月阅读 21,524评论 0 4
  • 在进行互联网产品设计时,尤其是互联网金融产品,实名认证是很重要的环节。今天和大家聊聊一个很容易被忽视的话题:身份证...
    威理阅读 1,306评论 4 7
  • 因项目需要,在绑定银行卡的时候,需要校验身份证号码是否合法,于是去 Google 了一下,现总结如下 18 身份证...
    为何是Hex的昵称阅读 4,811评论 0 4
  • 今天在微信上和从小青梅竹马的闺蜜取得了联系,虽然在线上相谈甚欢,但却没有了青春年少时的无穷无尽的话题可...
    4b40c2d9081e阅读 165评论 0 0