//生成前17位,萌新第一次学计算机编程,技术低级,不喜勿喷。
//前六位城市码
QList<int> list_citycode = {440101,440103,440104,440105,440106,440111,440112,440113,440114,440115,440116,440183,440184,440201,440203,440204,440205,440222,440224,440229,440232,440233,440281,440282,440301,440303,440304,440305,440306,440307,440308,440401,440402,440403,440404,440501,440507,440511,440512,440513,440514,440515,440523,440601,440604,440605,440606,440607,440608,440701,440703,440704,440705,440781,440783,440784,440785,440801,440802,440803,440804,440811,440823,440825,440881,440882,440883,440901,440902,440903,440923,440981,440982,440983};//54个
//校验码
QList<QString> t = { "1","0","X","9","8","7","6","5","4","3","2"};
//获取今日的年月日
QDate date(QDate::currentDate());
int year_current = date.year();
int month_current = date.month();
int day_current = date.day();
//QT5.10及以上版本的QRandomGenerator方法生成随机数,随机取城市码
int random_number_citycode = QRandomGenerator::global()->bounded(0,54);
QString provent = QString::number(list_citycode[random_number_citycode]);
int random_number_old = QRandomGenerator::global()->bounded(0,70);
QString res_year = QString::number(year_current - random_number_old);
QString gov_num = "17";
QString sexcode = QString::number(QRandomGenerator::global()->bounded(1,2));
QString month_be = QString::number(month_current);
QString day_be = QString::number(day_current);
QString month_res;
QString day_res;
if (month_be.length() == 1){
month_res = "0" + month_be;
}else{
month_res = month_be;
}
if (day_be.length() == 1){
day_res = "0" + day_be;
}else{
day_res = day_be;
}
QString s = provent + res_year + month_res + day_res + gov_num + sexcode;
//计算前17位本体码乘以其加权因子并求和,并取余
int total = ((s.midRef(0,1).toInt()) * 7 + (s.midRef(1,1).toInt()) * 9 + (s.midRef(2,1).toInt()) * 10 + (s.midRef(3,1).toInt()) * 5 + (s.midRef(4,1).toInt()) * 8 + (s.midRef(5,1).toInt()) * 4 + (s.midRef(6,1).toInt()) * 2 + (s.midRef(7,1).toInt()) * 1 + (s.midRef(8,1).toInt()) * 6 + (s.midRef(9,1).toInt()) * 3 +(s.midRef(10,1).toInt()) * 7 + (s.midRef(11,1).toInt()) * 9 + (s.midRef(12,1).toInt()) * 10 + (s.midRef(13,1).toInt()) * 5 + (s.midRef(14,1).toInt()) * 8 +(s.midRef(15,1).toInt()) * 4 + (s.midRef(16,1).toInt()) * 2) % 11;
//获得第18位校验码
QString lastcode = t[total];
//拼接前17位和第18位,获得完整号码
QString idnumber = s + lastcode;
QT根据前17位证件号码计算第18位校验码,以及前17位数字生成
于 2022-11-17 13:56:49 首次发布