C++——ID身份证号真伪辨别

输入身份证号就能判断是否为真id

#include <iostream> 
#include <string.h> 
using namespace std;
const int factor[] = {
    
     7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };//加权因子 
const int checktable[] = {
    
     1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 };//校验值对应表 
int checkIDinput( char[] ); 
void checkID( int[], char[] );
int main() {
    
     
while(1){
    
    
    	char ID[ 19 ]; 
    int IDNumber[ 19 ]; 
    cout << "\n输入身份证号码:"; 
    cin  >> ID;    
    while( !checkIDinput( ID ) )  //防止输入过程中位数输入错误   
    {
    
     
           cout << "\n错误ID,重新输入:"; 
           cout << "\n输入身份证号码:"<<'\n'; 
           cin  >> ID; } 
    
    for ( int i = 0; i < 18; i ++ )//相当于类型转换 
         IDNumber[ i ] = ID[ i ] - 48; 
         
    
    checkID( IDNumber, ID ); }}
    
int checkIDinput( char ID[] )//检验身份证是否为18位 
{
    
     
    if ( strlen( ID ) == 18 )//字符串最后一位/0 
       return 1; 
    else return 0; }

void checkID( int IDNumber[], char ID[] ) {
    
     
     int i = 0;//i为计数 
     int checksum = 0; 
     for ( i=0; i < 17; i ++ ) 
         checksum += IDNumber[ i ] * factor[ i ]; 
    
     if ( IDNumber[ 17 ] == checktable[ checksum % 11 ] || ( ID[ 17 ] == 'x' && checktable[ checksum % 11 ] == 2 ))     
	   cout << "\n正确身份证号码"<<'\n'; 
     else cout << "\n错误身份证号码"<<'\n'; }
  • 输入身份证即可
    身份证号真伪

猜你喜欢

转载自blog.csdn.net/GodOuO/article/details/105616172