zoukankan      html  css  js  c++  java
  • SDNU 1277.严厉打击假冒身份证

    Description

    WY最近从网上学来了如何验证正确的身份证的方法,有了这个方法,WY天黑都不怕~~

    已知身份证验证方法如下:
    根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
    1.将前面的身份证号码17位数分别乘以不同的系数。身份证号码第i位对应的系数为[2^(18-i)] mod 11(此处^代表指数运算)。
    2.将这17位数字和系数相乘的结果相加
    3.用加出来和除以11,得出余数y。
    4.校验码为(12 - y) mod 11 若此结果为10,则以小写字母x代替。

    Input

    多行身份证号

    Output

    输出该身份证是否合法,合法输出"Right",不合法输出"Error",后边跟一空白行

    Sample Input

    111111199801010017

    Sample Output

    Right
    #include <cstdio>
    #include <iostream>
    #include <cmath>
    #include <string>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    #define ll long long
    
    int plu[20];
    ll sum1;
    string word;
    char c;
    
    int qsm(int a, int b)//快速幂
    {
        int sum = 1;
        while(b)
        {
            if(b&1)
            {
                sum = (sum*a)%11;
            }
            b /= 2;
            a = (a*a)%11;
        }
        return sum;
    }
    
    int main()
    {
        for(int i = 0; i <= 17; i++)
        {
            plu[i] = qsm(2, 17-i);
        }
        while(cin >> word)
        {
            sum1 = 0;
            for(int i = 0; i<17; i++)
            {
                sum1 += (word[i]-'0')*plu[i];
            }
            int miao = (12-(sum1%11))%11;
            if(miao == 10)
            {
                if(word[17] == 'x')printf("Right
    
    ");
                else printf("Error
    
    ");
            }
            else
            {
                if(miao == word[17]-'0')printf("Right
    
    ");
                else printf("Error
    
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    python线程的几种创建方式
    python进程之间的通信——Queue
    python中进程的几种创建方式
    python中的生成器、迭代器、闭包、装饰器
    java中String和StringBuffer的区别
    python中的元类介绍
    宣传片制作技巧
    树莓派创建WiFi热点
    PCB布线要求
    jsoncpp linux平台编译和arm移植
  • 原文地址:https://www.cnblogs.com/RootVount/p/10365734.html
Copyright © 2011-2022 走看看