| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 708 人关注过本帖, 1 人收藏
标题:求一个校验身份证号码有效性的代码 (转贴)
只看楼主 加入收藏
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
收藏(1)
 问题点数:0 回复次数:2 
求一个校验身份证号码有效性的代码 (转贴)
校验身份证号码中的出生年月日的有效性和末位的有效性。
程序代码:
SFZH=[141027197802163033]

*-- 判断身份证长度
IF LEN(SFZH)!=18
   MESSAGEBOX([身份证号码长度为 ]+TRANSFORM(LEN(SFZH))+[])
ENDIF

*-- 判断年
NYEAR=INT(VAL(SUBSTR(SFZH,7,4)))
IF NOT BETWEEN(NYEAR,1900,YEAR(DATE()))
   MESSAGEBOX([身份证 年 错误 【]+TRANSFORM(NYEAR)+[])
   RETURN NYEAR
ELSE
   *-- 判断月
   NMONTH=INT(VAL(SUBSTR(SFZH,11,2)))
   IF NOT BETWEEN(NMONTH,1,12)
      MESSAGEBOX([身份证 月 错误 【]+TRANSFORM(NMONTH)+[])
      RETURN NMONTH
   ELSE
      *-- 判断日
      NDAY=INT(VAL(SUBSTR(SFZH,13,2)))
      RQ=DATE(NYEAR,NMONTH,1)
      IF NOT BETWEEN(NDAY,1,GOMONTH(RQ,1)-RQ)
         MESSAGEBOX([身份证 日 错误 【]+TRANSFORM(NDAY)+[】 本月只有 ]+TRANSFORM(GOMONTH(RQ,1)-RQ)+[])
         RETURN NDAY
      ENDIF
   ENDIF
ENDIF

*-- 获取校验码
X=[7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2]
NUM=0
FOR I=1 TO 17
    NUM=NUM+INT(VAL(SUBSTR(SFZH,I,1)))*INT(VAL(GETWORDNUM(X,I,[ ])))
ENDFOR
*   Y值: 0 1 2 3 4 5 6 7 8 9 10
*校验码: 1 0 X 9 8 7 6 5 4 3 2
XYM=[1 0 X 9 8 7 6 5 4 3 2]
CXYM=GETWORDNUM(XYM,MOD(NUM,11)+1,[ ]) &&提取的第18位校验码
MESSAGEBOX([生成的第18位数字为【]+CXYM+[]+IIF(SUBSTR(SFZH,18,1)==CXYM,[与身份证相符],[与身份证不相符])+[]+SUBSTR(SFZH,18,1)+[])

搜索更多相关主题的帖子: 身份证号码 出生年月日 color 
2013-03-23 22:51
apachephp
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-8-1
收藏
得分:0 
好东西,校验码不知道是怎么回事呀.
2013-04-19 16:25
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
收藏
得分:0 
以下是引用apachephp在2013-4-19 16:25:39的发言:

好东西,校验码不知道是怎么回事呀.

就是身份证号码的第18位数字
2013-04-20 14:27
快速回复:求一个校验身份证号码有效性的代码 (转贴)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018267 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved