身份证号码升级

问题描述

  从1999年10月1日开始,公民身份证号码由15位数字增至18位。(18位身份证号码简介)。升级方法为:

  1、把15位身份证号码中的年份由2位(7,8位)改为四位。

  2、最后添加一位验证码。验证码的计算方案:

  将前 17 位分别乘以对应系数 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) 并相加,然后除以 11 取余数,0-10 分别对应 1 0 x 9 8 7 6 5 4 3 2。

  请编写一个程序,用户输入15位身份证号码,程序生成18位身份证号码。假设所有要升级的身份证的四位年份都是19××年

输入格式

  一个15位的数字串,作为身份证号码

输出格式

  一个18位的字符串,作为升级后的身份证号码

样例输入

110105491231002

样例输出

11010519491231002x

数据规模和约定

  不用判断输入的15位字符串是否合理

#include<stdio.h>  
    int xishu[17]= {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};  
    char jieguo[11]= {‘1‘,‘0‘,‘x‘,‘9‘,‘8‘,‘7‘,‘6‘,‘5‘,‘4‘,‘3‘,‘2‘};  
    int main()  
    {  
        char a[18];  
        int b[18];  
        int i,sum=0;  
        gets(a);           //scanf("%s",a);
       for(i=14; i>=6; i--)  
            a[i+2]=a[i];  
        a[6]=‘1‘;  
        a[7]=‘9‘;  
        for(i=0; i<17; i++)  
        {  
            b[i]=a[i]-‘0‘;  
            sum+=b[i]*xishu[i];  
        }  
        sum%=11;  
        a[17]=jieguo[sum];  
        for(i=0; i<18; i++)  
            printf("%c",a[i]);  
        printf("\n");  
        return 0;  
    }

时间: 2024-12-18 18:37:19

身份证号码升级的相关文章

算法提高 身份证号码升级

问题描述 从1999年10月1日开始,公民身份证号码由15位数字增至18位.(18位身份证号码简介).升级方法为: 1.把15位身份证号码中的年份由2位(7,8位)改为四位. 2.最后添加一位验证码.验证码的计算方案: 将前 17 位分别乘以对应系数 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) 并相加,然后除以 11 取余数,0-10 分别对应 1 0 x 9 8 7 6 5 4 3 2. 请编写一个程序,用户输入15位身份证号码,程序生成18位身份证号码.假设所

算法训练:身份证号码升级

问题描述 从1999年10月1日开始,公民身份证号码由15位数字增至18位.(18位身份证号码简介).升级方法为: 1.把15位身份证号码中的年份由2位(7,8位)改为四位. 2.最后添加一位验证码.验证码的计算方案: 将前 17 位分别乘以对应系数 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) 并相加,然后除以 11 取余数,0-10 分别对应 1 0 x 9 8 7 6 5 4 3 2. 请编写一个程序,用户输入15位身份证号码,程序生成18位身份证号码.假设所

按GB 11643标准对大陆身份证号码分析验证

按照GB 11643标准进行身份证验证,然后GB/T 2260采用的是2013标准,因为实在无法找到GB/T 2260-84标准,所以实际会出现正确的身份证也无法识别的情况,这时候可以通过设置要验证的AreaLevel来降低验证级别,如果能找全所有GB/T 2260标准的话,代码也就能加入按生日判断该采用哪个标准的功能,下面是具体代码 相关枚举 /// <summary> /// 身份证号码长度 /// </summary> public enum CardLength { All

JAVA验证身份证号码是否合法

package com.chauvet.utils; import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.HashMap;import java.util.Map;import java.util.regex.Match

我用python算出了同事的身份证号码!

作者:朱小五 来源:凹凸玩数据 事情的经过是这样的: 我的同事李大伟最近出差去了. 昨晚睡觉前翻了翻朋友圈, 就跟他愉快地 互怼 交流了起来. 估计是他想起了我朱小五从不打无把握之赌,后面就怂了. 一杯奶茶嘛,也可以接受, 像杰伦一样快乐就好啦. 开工. 先看看李大伟的朋友圈中发的图片. (该火车票来自其他平行世界,扫描可能发生奇怪现象) 车票中暴露的个人信息为: 3302211993****4914 李大伟 只缺少月份日期四位. 那么也就是一共365种可能. 科普时间: 根据李大伟的身份证信息

例题:输入身份证号码,判断你是什么生肖。switch,case练习,substring 类使用联系,会用取余

Console.WriteLine("请输入您的身份证号码"); string x = Console.ReadLine(); string year=x.Substring (6,4);//从身份证的第六位开始截取,往后截取四位,就是你的出生年份 int x1 = Convert.ToInt32(year);//把截取到年份代入到x1中, string sx = ""; switch(x1%12)//输入一个年份取余,如果假设取余为四,你能判断那年的生肖,然后根据

使用Excel的函数批量判断身份证号码是否有效

一.描述 现在有一个批量上传用户的需求,其中需要上传用户名.姓名和身份证号码,进行实名批量注册,如何能快速判断用户给的身份证号是否格式正确呢?其实无论是WPS的excel还是Microsoft office中的excel都提供了函数功能,我们只要在单元中调用一定的函数就可以判断该身份证是否符合要求,如果符合,就输出Right,错误就输出Wrong. 二.源代码 =IF(LOOKUP((LEFT(C2,1)*7+MID(C2,2,1)*9+MID(C2,3,1)*10+MID(C2,4,1)*5+

身份证号码合法性判断

问题描述: 我国公民的身份证号码特点如下: 1.长度为18位: 2.第1-17位只能为数字: 3.第18位可以是数字或者小写英文字母x. 4.身份证号码的第7~14位表示持有人生日的年.月.日信息. 例如:511002198808080111或51100219880808011x. 请实现身份证号码合法性判断的函数.除满足以上要求外,需要对持有人生日的年.月.日信息进行校验.年份大于等于1900年,小于等于2100年.需要考虑闰年.大小月的情况.所谓闰年,能被4整除且不能被100整除或能被400

比较严谨的java验证18位身份证号码

/** * 我国公民的身份证号码特点如下 * 1.长度18位 * 2.第1-17号只能为数字 * 3.第18位只能是数字或者x * 4.第7-14位表示特有人的年月日信息 * 请实现身份证号码合法性判断的函数,函数返回值: * 1.如果身份证合法返回0 * 2.如果身份证长度不合法返回1 * 3.如果第1-17位含有非数字的字符返回2 * 4.如果第18位不是数字也不是x返回3 * 5.如果身份证号的出生日期非法返回4 * * @since 0.0.1 */ private int valida