QT根据前17位证件号码计算第18位校验码,以及前17位数字生成

//生成前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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值