文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» PowerBuilder » 验证身份证号输入的正确性       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: [转载] 验证身份证号输入的正确性  ( 查看:130  回复:0 )   
 
ribut9225
主版主  点击可查看详细


开坛元老   内阁大臣   诚信兄弟   主版主专用   巨蟹座  
帖子 3110
精华 1
无忧币 5991
积分 4100
阅读权限 150
来自 (保密)
注册日期 2006-6-22
最后登录 2008-10-8 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-6-26 08:57   标题:验证身份证号输入的正确性
上一帖 |
验证身份证号输入的正确性-0611020-很不错
/*-------------------------------------------------------------------------------
* 函数名称:Boolean gf_check_identity(string as_identity)
* 函数功能: 验证身份证号输入的正确性
* 参数说明: string      as_identity    身份证号
* 返 回 值: True  成功
*            False 失败
* 调用举例: gf_check_identity('410101650101101')   
* 尚未完善:没有对身份证号码的第18位校验位进行判断。因为我暂时没有找到第18位
*     的校验算法,等找到了我再加上。应该比较简单。
* 修改日期: 2001-6-20
* 修 改 人: 郭保利
*--------------------------------------------------------------------------------
* 修 改 人: 江松华  Date: 2006.07.13
*--------------------------------------------------------------------------------
* 修改内容:
*    增加了对身份证号码第18位数的验证功能。
*--------------------------------------------------------------------------------*/
String ls_identity_no
String ls_year,ls_month,ls_day,ls_date
String ls_today
Long ll_year
Long ll_identity_no_len
ls_identity_no = as_identity
ls_today = String(Today(),'yyyy/mm/dd')
ll_identity_no_len = Len(ls_identity_no)
IF ls_identity_no = ''  THEN
MessageBox("系统提示","身份证号码不能为空!!",StopSign!,ok!)
RETURN FALSE
ELSEIF ll_identity_no_len  15 AND ll_identity_no_len  18 THEN
MessageBox("系统提示","身份证号码位数不足,请检查输入情况!!",StopSign!,ok!)
RETURN FALSE
END IF
IF ll_identity_no_len = 15 THEN //身份证为 15 处理,  认为15位的年 = 19**
ls_year = Mid(ls_identity_no, 7, 2)
ls_month = Mid(ls_identity_no, 9, 2)
ls_day = Mid(ls_identity_no, 11, 2)
ls_year = '19' + ls_year //year is only 20 century
ls_date = ls_year +'/' + ls_month +'/' + ls_day
ELSE
ls_year = Mid(ls_identity_no, 7, 4)
IF Left(ls_year,2)  '19' AND Left(ls_year,2)  '20' THEN
  MessageBox("系统提示","身份证号码中的出生年份不正确, 请您重新输入! ",StopSign!,ok!)
  RETURN FALSE
END IF
ls_month = Mid(ls_identity_no, 11, 2)
ls_day = Mid(ls_identity_no, 13, 2)
ls_date = ls_year +'/' + ls_month +'/' + ls_day
END IF
IF ls_month > '12' THEN
MessageBox("系统提示","身份证号码中的出生月份大于12, 请您重新输入!",StopSign!,ok!)
RETURN FALSE
ELSEIF ls_month
IF ls_day
CHOOSE CASE ls_month
CASE '01','03','05','07','08','10','12' //大月的处理
  IF ls_day > '31' THEN
   MessageBox("系统提示","身份证号码的出生日大于31, 请您重新输入!",StopSign!,ok!)
   RETURN FALSE
  END IF
  
CASE '04','06','05','09','11' //小月的处理
  IF ls_day > '30' THEN
   MessageBox("系统提示","身份证号码的出生日大于30, 请您重新输入!",StopSign!,ok!)
   RETURN FALSE
  END IF
CASE '02' //平年和闰年的处理
  ll_year = Long(ls_year)
  If (Mod(ll_year,4) = 0 AND Mod(ll_year,100)  0) Or (Mod(ll_year,400) = 0) THEN //闰年,二月份不能多于29天
   IF ls_day > '29' THEN
    MessageBox("系统提示","闰年的二月份没有" + ls_day + "日,请重新输入出生日期!",StopSign!,ok!)
    RETURN FALSE
   END IF
  ELSE //平年二月份不能大于28天
   IF ls_day > '28' THEN
    MessageBox("系统提示","身份证号码的出生日期小于登记日期,不合理请您重新输入!",StopSign!,ok!)
return False
end if
end if
END CHOOSE

if ls_date > ls_today then
MessageBox("系统提示","身份证号码的出生日期小于登记日期,不合理请您重新输入!",StopSign!,ok!)
return False
end if

return True



用户必读,51CTO积分系统调整通知
2008-6-26 08:571楼
[ 顶部 ]
     
论坛跳转:  

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号