参数中strRegionCode则是身份证的前六位地区号码,需要用户自己添加。
QString GenPID(QString strRegionCode)
{
time_t t;
srand((unsigned)time(&t));
int Year = rand()/(RAND_MAX * 1.0) * 85 + 5;
int Month = rand()/(RAND_MAX * 1.0) * 11 + 1;
int Date = rand()/(RAND_MAX * 1.0) * 27 + 1;
int Num = rand()/(RAND_MAX * 1.0) * 998 + 1;
char newNumber[19];
sprintf(newNumber, "%6s19%02d%02d%02d%03d", strRegionCode.toStdString().c_str(), Year, Month, Date, Num);
int ai[17];
const int wi[18] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1};
const char map[] = {'1','0','X','9','8','7','6','5','4','3','2'};
int sum = 0;
for(int i = 0; i < 17; i ++)
{
ai[i] = newNumber[i] - 48;
sum += ai[i] * wi[i];
}
newNumber[17] = map[sum%11];
newNumber[18] = '\0';
return QString::fromAscii(newNumber);
}