输入身份证号就能判断是否为真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'; }
- 输入身份证即可