| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1579 人关注过本帖
标题:请老师给分析一个关于身份证号检测程序
取消只看楼主 加入收藏
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
结帖率:77.78%
收藏
已结贴  问题点数:20 回复次数:2 
请老师给分析一个关于身份证号检测程序
Function MyIdentityCardVerify &&校验身份证号是否合法
    Lparameters lstr &&参数:lstr 传入的号码
    Private lstr,relyn,tsfz,m1,m2,m3,m4,m,I,r,c,ai,wi
    relyn=.F. &&返回值
    tsfz=Alltrim(lstr)
    *分别用m1,m2,m3,m4表示四个条件是否成立
    Stor .T. To m1,m2,m3,m4
    *条件1:只能是15或18位
    m1=Iif(Len(tsfz)=15 Or Len(tsfz)=18,.T.,.F.)
    If Len(tsfz)=15 && 15位的号码
        For I=1 To 15 &&检查每一位是否为数字
            m=Asc(Substr(tsfz,I,1))
            If m<48 Or m>57 &&数字
                m2=.F. &&若有一位不是就不再查
                Exit
            Endif
        Endfor
       m="19" +Substr(tsfz, 7,2) &&早期的号都是上个世纪的
        m=m+"."+Substr(tsfz, 9,2)
        m=m+"."+Substr(tsfz,11,2)
        m=Ctod(m)
        If Isnull(m) Or Isblank(m)
            m3=.F. &&生日不正确
        Endif
    Endif
    If Len(tsfz)=18 && 18位的号码
        For I=1 To 17
            m=Asc(Substr(tsfz,I,1))
            If m<48 Or m>57
                m2=.F.
                Exit
            Endif
        Endfor
        m=Substr(tsfz,7,4)
        m=m+"."+Substr(tsfz,11,2)
        m=m+"."+Substr(tsfz,13,2)
        m=Ctod(m)
        If Isnull(m) Or Isblank(m)
            m3=.F.
        Endif
        r=0 &&计算校验位
        For I=18 To 2 Step -1
            ai=Val(Substr(tsfz,19-i,1))
            wi=Mod(2^(i-1),11)
            r=r+ai*wi
        Next
        r=Mod(r,11)
        Do Case
            Case r=0
                c="1"
            Case r=1
                c="0"
            Case r=2
                c="X"
            Otherwise
                c=Alltrim(Str(12-r))
        Endcase
        If Upper(Substr(tsfz,18,1))<>c
            m4=.F. &&校验位与原码最末位不同
        Endif
    Endif
    *四个条件全成立,则返回.t.
    relyn=Iif(m1 And m2 And m3 And m4,.T.,.F.)
    Return relyn
Endfunc
其中红色部分检测身份证时不能通过,不知为什么,请老师指点!

[ 本帖最后由 shyibaoban 于 2010-10-19 23:50 编辑 ]
搜索更多相关主题的帖子: 检测 老师 身份证 
2010-10-19 23:25
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
收藏
得分:0 
没人看到,还是不屑一顾啊,帮个忙了。
2010-10-20 01:19
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
收藏
得分:0 
以上老师说的对,我看了一下,真的是在VF里的时间有问题,改过后在命令窗口中测试可以了,但到程序里一调用就不成了,不知道怎样调用?请教。

[ 本帖最后由 shyibaoban 于 2011-12-14 13:58 编辑 ]
2010-10-21 22:39
快速回复:请老师给分析一个关于身份证号检测程序
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023169 second(s), 8 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved