ID卡算法-生成合格的ID卡号

电脑杂谈  发布时间:2020-07-02 00:29:21  来源:网络整理

excel号算年龄_excel号算性别_号怎么算

根据中华人民共和国国家标准GB 11643-1999中关于公民编号的规定,公民编号是功能的组合,由17位数字的身体代码和一位数字的验证码组成. 从左到右的排列顺序是: 六位地址码,八位出生日期码,三位顺序码和一位校验码. 序列码的奇数分配给男性号怎么算号怎么算,偶数分配给女性. 验证码是根据ISO 1764: 1983.MOD 11-2验证码基于前十七位数字代码计算出的验证码.

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

excel号算性别_号怎么算_excel号算年龄

841AE4D906940F38E8DA7F157DB640CF.jpg

号怎么算_excel号算性别_excel号算年龄

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)

号怎么算_excel号算性别_excel号算年龄

 // 加权因子、固定的值
    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/1; //取各位 校验位
        int shi = i0/10; //取十位
        int bai = i00/100; //取百位
        int qian = i 000/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]];}
    }

 for (int i = 0; i<999; i++) {
        int S = sum;
        NSString *ge = @"X"; //取各位 校验位
        int shi = i/1; //取i的各位
        int bai = i0/10; //取i的十位
        int qian = i 00/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]];}
    }

号怎么算_excel号算性别_excel号算年龄

最终生成的号码是当前县的当前号码.

C0A90AA44EA6A2BD37C86BE3BA5368A0.jpg

离题:

假设一个县当天有1100多个孩子出生,情况将会怎样.

有人可以告诉我如何获取公式,图片吗?


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-265169-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...