zoukankan      html  css  js  c++  java
  • 身份证号码升级

    问题描述
      从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位字符串是否合理

    这个题很容易  就是恶心

    考查一些  字符串  ACIIL码。注意变换

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int i,n,j,m,k;
        long long int s;
      char a[100];
      char b[100];
      gets(a);
      n=strlen(a);
      for(i=0;i<6;i++)
      {
          b[i]=a[i];//前六个存进B数组里
      }
      b[6]='1';
      b[7]='9';加入俩
    for(i=6;i<n;i++)
    {
        b[i+2]=a[i];
    }
    for(i=0;i<n+2;i++)
    {
        printf("%c",b[i]);
    }
    
    s=(b[0]-48)*7+(b[1]-48)*9+(b[2]-48)*10+(b[3]-48)*5+(b[4]-48)*8+(b[5]-48)*4+(b[6]-48)*2+(b[7]-48)*1+(b[8]-48)*6+(b[9]-48)*3+(b[10]-48)*7+(b[11]-48)*9+(b[12]-48)*10+(b[13]-48)*5+(b[14]-48)*8+(b[15]-48)*4+(b[16]-48)*2;
    s=s%11;///乘上系数
    if(s==0)
    printf("1");
    if(s==1)
        printf("0");
    if(s==2)
        printf("x");
    if(s==3)
    printf("9");
    if(s==4)
        printf("8");
    if(s==5)
        printf("7");
    if(s==6)
        printf("6");
        if(s==7)
        printf("5");
        if(s==8)
            printf("4");
        if(s==9)
            printf("3");
        if(s==10)
            printf("2");
    
        getchar();getchar();getchar();
        return 0;
    }
  • 相关阅读:
    什么是多线程中的上下文切换?
    什么是基本表?什么是视图?
    什么是存储过程?用什么来调用?
    随意写文件命令?怎么向屏幕输出带空格的字符串,比如” hello world”?
    NULL 是什么意思 ?
    Mock 或 Stub 有什么区别?
    什么叫视图?游标是什么?
    什么是微服务中的反应性扩展?
    什么是线程组,为什么在 Java 中不推荐使用?
    Java 中用到的线程调度算法是什么?
  • 原文地址:https://www.cnblogs.com/zhangjiaqi123/p/6171207.html
Copyright © 2011-2022 走看看