身份证算法-生成合格的身份证号码

根据《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

案例身份证号码:430923199509106866 
ps:此号码由算法算出,如有雷同纯属巧合

身份证号码的组成的结构:

841AE4D906940F38E8DA7F157DB640CF.jpg
1. 前1-6位数字表示:所在省(直辖市、自治区)、市、县的代码;
2. 第7—14位数字表示:出生年、月、日;
3. 第15、16位数字表示:所在地的派出所的代码;
4. 第17位数字表示性别:奇数表示男性,偶数表示女性;
5. 最后一位是校验码,校验你的身份证号码是否合格;

身份证号码是如何生成的?

两个必要因素:加权因子(wi) | 校验编码
wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 
校验编码:1 0 x 9 8 7 6 5 4 3 2
公式:S = 

通俗理解就是:身份证的第一位*加权因子的第一位 + 身份证的第二位*加权因子的第二位 
 ...  以此类推。

求出的和 % 11,得到一个校验位码 (假设是:5)

最后通过校验位码从校验编码中取出校验码(校验编码中的第5个数)

得到的数字与身份证最后一位匹配,如果相同,那就是合格的身份证号码
(第5位是8,那么身份证位数也必须是8)

用代码来生成合格身份证

 // 加权因子、固定的值
    NSArray *arr =@[@"7",@"9",@"10",@"5",@"8",@"4",@"2",@"1",@"6",@"3",@"7",@"9",@"10",@"5",@"8",@"4",@"2"];
    NSString *str = @"43092319950910"; // 身份证的省市县+出生年月
    NSString *JYM =@"10X98765432"; //校验码
    _array = [NSMutableArray array]; //保存产生的合格身份证的数组
    int sum = 0; //得到 省市县+出生年月 加权因子和
    for (int i = 0; i<str.length; i++) {
        id number = [str substringWithRange:NSMakeRange(i, 1)];
        sum += [number intValue] * [arr[i] intValue];
    }
    //通过加权因子计算,再衍算接下来的4位
    for (int i = 0; i<9999; i++) {
        int S = sum;
        int ge = i%10/1; //取各位 校验位
        int shi = i%100/10; //取十位
        int bai = i%1000/100; //取百位
        int qian = i %10000/1000; //取千位
        S += shi*[arr[16] intValue] + bai*[arr[15] intValue] + qian*[arr[14]intValue]; //加权求和
        int Y = S % 11; //身份证取模算法 y = mod(S, 11)
        //模数校验
        id M = [JYM substringWithRange:NSMakeRange(Y,1)];// 判断校验位
        BOOL b = ge == [M intValue]; // 判断身份证是否合格
        //合格的身份证添加到数组
        if(b){[_array addObject:[NSString stringWithFormat:@"%@%d%d%d%d",str,qian,bai,shi,ge]];}
    }

还有尾号是X的身份证

 for (int i = 0; i<999; i++) {
        int S = sum;
        NSString *ge = @"X"; //取各位 校验位
        int shi = i%10/1; //取i的各位
        int bai = i%100/10; //取i的十位
        int qian = i %1000/100; //取i的百位
        S += shi*[arr[16] intValue] + bai*[arr[15] intValue] + qian*[arr[14]intValue]; //加权求和
        int Y = S % 11; //身份证取模算法 y = mod(S, 11)
        //模数校验
        id M = [JYM substringWithRange:NSMakeRange(Y,1)];// 判断校验位
        BOOL b = [ge isEqualToString:M];
        if(b){[_array addObject:[NSString stringWithFormat:@"%@%d%d%d-%@",str,qian,bai,shi,ge]];}
    }

最终生成的号码就是当前这个县,当日所有的合格身份证号码。


C0A90AA44EA6A2BD37C86BE3BA5368A0.jpg

总结:

  • 通过上面的算法,可以判断一个用户输入的身份证号码是否合格。
  • 合格的身份证号码不一定合法,需要公安局的录入了才能代表个人。
  • 位数是X的占比大约是百分之一的比例。
  • 不带X的身份证号码,每个县稳定输出1000个(男女各500)。
  • 输入固定的 省市县 + 出生年月日 得到的列表里一定有你的身份证号码。

题外话:
🤪假设某个县当天出生的小孩超过1100个,会怎么样。
🤪谁能告诉我 公式那里怎么弄😝,图片?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容