打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
身份证号码验证方法

*************************
* 身份证号码验证方法
*************************
*PARAMETERS SFZ
CLEAR
CLOSE TABLES
**oldgzq=select()
LOCAL RQ,XB,ZFZH
SFZ="34052219870228001X"
XB="男"
SFZH=""
*----身份证号码位数验证
IF !INLIST(LEN(SFZ),15,18)
   MESSAGEBOX("身份证号码位数不够",64,"系统信息")
   RETURN
ENDIF
*----统一位数为17位
IF LEN(SFZH)=15
   SFZH=STUFF(SFZ,7,0,"19") &&补足17位
ELSE
   SFZH=LEFT(SFZ,17)
ENDIF
*----出生日期"月"初查
IF !BETWEEN(VAL(SUBSTR(SFZH,11,2)),1,12)
   MESSAGEBOX("身份证号码出生日期【月】代码超出范围",64,"系统信息")
   RETURN
ENDIF
*----出生日期"日"初查
IF !BETWEEN(VAL(SUBSTR(SFZH,13,2)),1,31)
   MESSAGEBOX("身份证号码出生日期【日】代码超出范围",64,"系统信息")
   RETURN
ENDIF

RQ=DATE(VAL(SUBSTR(SFZH,7,4)),VAL(SUBSTR(SFZH,11,2)),VAL(SUBSTR(SFZH,13,2))) &&转换为出生日期

*----身份证发放地代码验证(前6位数字)
USE QHDM ALIAS QHDM &&行政区划代码表
LOCATE FOR 区划代码==LEFT(SFZH,6)
IF !FOUND()
   MESSAGEBOX("未查到该身份证发放地代码",64,"系统信息")
   RETURN
ELSE
   NAME3=ALLTRIM(区划名称)
   LOCATE FOR LEFT(区划代码,2)==LEFT(SFZH,2) AND RIGHT(区划代码,4)="0000"
   NAME1=ALLTRIM(区划名称)
   LOCATE FOR LEFT(区划代码,4)==LEFT(SFZH,4) AND RIGHT(区划代码,2)="00"
   NAME2=ALLTRIM(区划名称)
   MESSAGEBOX("该身份证发放地为【"+NAME1+NAME2+NAME3+"】",64,"系统信息")
ENDIF
*----身份证出生年验证
IF !INLIST(SUBSTR(SFZH,7,2),"19","20")
   MESSAGEBOX("身份证号码出生日期【年】代码错误",64,"系统信息")
   RETURN
ENDIF
*----身份证出生月验证
IF !BETWEEN(VAL(SUBSTR(SFZH,11,2)),1,12)
   MESSAGEBOX("身份证号码出生日期【月】代码错误",64,"系统信息")
   RETURN
ENDIF
*----身份证出生日验证
IF !BETWEEN(VAL(SUBSTR(SFZH,13,2)),1,DAY(GOMONTH(RQ-DAY(RQ)+1,1)-1))
   MESSAGEBOX("身份证号码出生日期【日】代码错误",64,"系统信息")
   RETURN
ENDIF
*----性别验证
IF !INLIST(MOD(VAL(SUBSTR(SFZH,17,1)),2),IIF(XB="男",1,0))
   MESSAGEBOX("身份证【性别】代码与实际情况不符",64,"系统信息")
   RETURN
ENDIF
*----第18位校验码验证
J="79A584216379A5842" && A="10"
*   Y值:012345678910
校验码="10X98765432"
NSTR=0
IF LEN(SFZ)=18
   FOR I=1 TO LEN(SFZ)-1
       NSTR=NSTR+VAL(SUBSTR(SFZ,I,1))*VAL(IIF(SUBSTR(J,I,1)=="A","10",SUBSTR(J,I,1)))
   ENDFOR
   IF RIGHT(SFZ,1)==SUBSTR(校验码,MOD(NSTR,11)+1,1)
      MESSAGEBOX("第18位校验码为【"+SUBSTR(校验码,MOD(NSTR,11)+1,1)+"】,与身份证校验码相符",64,"系统信息")
   ELSE
      MESSAGEBOX("第18位校验码为【"+SUBSTR(校验码,MOD(NSTR,11)+1,1)+"】,与身份证校验码不相符",64,"系统信息")
   ENDIF  
ENDIF

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
校验身份证号码有效性的代码
求VF60下小写数自动转换大写数的控件或类|交流区
身份证校验码计算器(注意记事本保存,另存为 BAT 文件打开) | wiFay 树洞
php验证身份证号码正确性
按键精灵 TXT文件用法大全 (源码) (免费!)
C++身份证号验证
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服