功能简单介绍:针对一串身份证字符串(string)的处理:
1. 验证身份证的正确性
2. 提取出生年月日
3. 提取性别
4. 把15位的身份证号码转成18位
直接上代码:
#pragma once
#include <string>
using namespace std;
bool IsValidCitizenNo18(string& strCitizenNo)
{
int weight[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
char valid_num[] = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
int nSum = 0;
int nMode = 0;
int nLen = strCitizenNo.size();
if (nLen == 18)
{
for (int i = 0; i < nLen - 1; ++i)
nSum += (strCitizenNo[i] - '0') * weight[i];
nMode = nSum % 11;
if (valid_num[nMode] == strCitizenNo[17])
return true;
}
return false;
}
bool Cid15ToCid18(string& strCID15, string& strResult)
{
int nLen = strCID15.size();
if (nLen != 15)
return false;
int weight[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
char valid_num[] = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
int nSum = 0