身份证 = 220222202202222222
MsgBox % 身份证校验(身份证)

/*      下面这段由飞跃群分享
MsgBox % 18位身份证校验码(身份证)

18位身份证校验码(身份证) {
  if (StrLen(身份证)<17)  ;校验码计算需要身份证前17位
    return
  Loop, 17
    累和+=SubStr(身份证,A_Index,1)*Mod(1<<(18-A_Index),11)
  return SubStr("10X98765432", Mod(累和,11)+1, 1)
}
*/

身份证校验(ID) {
  省=
  (
  ,,,,,,,,,,
  北京市,天津市,河北省,山西省,内蒙古自治区,,,,,,
  辽宁省,吉林省,黑龙江省,,,,,,,,
  上海市,江苏省,浙江省,安徽省,福建省,江西省,山东省,,,,
  河南省,湖北省,湖南省,广东省,广西壮族自治区,海南省,,, 
  重庆市,四川省,贵州省,云南省,西藏自治区,,,,,,,
  陕西省,甘肃省,青海省,宁夏回族自治区,新疆维吾尔自治区
  )
  地址:=StrSplit(省,",")[substr(ID,1,2)]
  性别:=Mod(substr(ID,-1,1),2) ? "男" : "女" 
  出生:=substr(ID,7,8)
  EnvSub, 出生, %a_now%, days
  年龄 := 出生<0 ? substr(a_now,1,4)-substr(ID,7,4)+1 : ""
  Loop,Parse,% "7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2",`,
    Sum:=A_LoopField*SubStr(ID, a_index, 1)+(a_index=1 ? 0 : Sum)
  Return SubStr("10x98765432", Mod(Sum,11)+1, 1)=SubStr(ID, 0) and 年龄 and 地址 
          ? 地址 年龄 "岁" 性别 : "号码错误"
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。