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;
    }
  • 相关阅读:
    BZOJ2330 SCOI2011糖果
    BZOJ 3812主旋律
    模板更新 扩展卢卡斯
    BZOJ4556 HEOI2016字符串
    CodeForces700E Cool Slogans
    Atcoder Contest069F:Flag
    计算几何模板(更新中......)
    BZOJ4003 JLOI2015城池攻占
    BZOJ3772精神污染
    HDU5919 SequenceⅡ
  • 原文地址:https://www.cnblogs.com/RootVount/p/10365734.html
Copyright © 2011-2022 走看看