| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3019 人关注过本帖, 1 人收藏
标题:救助:如何对一个表中的身份证号进行判断。把错误的给导出来?
只看楼主 加入收藏
caohongyi
Rank: 2
来 自:青岛
等 级:论坛游民
帖 子:31
专家分:49
注 册:2010-8-13
收藏
得分:0 
Function sfz
    Parameters cNumber
    #Define InvalidSize "身份证号码长度不正确!"
    #Define InvalidChar "身份证号码包括非法字符!"
    #Define InvalidDate "出生日期无效!"
    #Define InvalidReturnValue ".F."
    Private cString
    Do Case
        Case Len(cNumber) = 15
            cString = Stuff(cNumber,7,0,"19")
        Case Len(cNumber) = 18
            cString =Left(Alltrim(cNumber),17)
        Otherwise
            Messagebox(InvalidSize,48,"信息提示")
            Return InvalidReturnValue
    Endcase
    Private i,N,iRet
    Store 0 To iRet
    For i = 1 To 17
        N = Substr(cString,i,1)
        If Not Isdigit(N)
            Messagebox(invalidChar,48,"信息提示")
            Return invalidReturnValue
        Endif
        N = 2 ^ (18 - i) % 11 * Val(N)
        iRet = iRet + N
    Endfor
    iRet = iRet % 11 + 1
    Private oldDateSet, oldCentury
    Private oldStrictDate, BirthDay
    oldDateSet = Set("DATE")
    oldCentury = Set("CENTURY")
    oldStrictDate = Set("STRICTDATE")
    Set Date Ansi
    Set Century On
    Set StrictDate To 0
    BirthDay = Ctod(Substr(cString,7,4)+"-"+Substr(cString,11,2)+"-"+Substr(cString,13,2))
    Set StrictDate To &oldStrictDate
    Set Century &oldCentury
    Set Date &oldDateSet
    If Empty(BirthDay)
        Messagebox(InvalidDate,48,"信息提示")
        Return InvalidReturnValue
    Endif
    Return cString+Substr("10x98765432",iRet,1)
Endfunc
2011-11-30 17:23
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:0 
以下是引用apple0072011在2011-11-30 16:19:15的发言:

那前六位如何校验啊
这需要公安的身份证号发放地代码库,并且数据表上要有出生地信息登记,拿这个信息与发放地代码库相比较就校验出来了

只求每天有一丁点儿的进步就可以了
2011-12-01 08:28
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
收藏
得分:0 
谢谢各位老师,因为这几天有点忙没来的及看。我要好好试一下。再次感谢。
2011-12-14 10:52
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
收藏
得分:0 
回复 9楼 kim_wei
你好:能给个实例吗?谢谢
2011-12-15 09:46
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
回复 14楼 shyibaoban
是不是应该重开一贴问呢
2011-12-15 11:34
sctjfms
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-8-11
收藏
得分:0 
前面的六位是全国行政区域编码,不同地域的代码都不一样,
2012-01-23 11:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
只能驗證格式是否正確,無法驗證身份證號碼的真偽。

授人以渔,不授人以鱼。
2012-01-24 00:03
lygcw9603
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:233
专家分:357
注 册:2006-8-27
收藏
得分:0 
现在的新身份证是18位,前6位是地址码:可以从国家统计局的网站下站一个全国行政区划代码,复制、粘贴到文本文件中,想办法导入你的数据表中。通过这个代码就可以判断前6位地址码是否正确。
中间8位是出生年月日:这个如何界定正确与否,没有一个判断标准,只有自己掌握。
第15、16位是地址码中(是以第5、6位代码表示的)所在地同年同月同日生的人的顺序号。
第17位代码表示男女,男为1,女为2
第18位代码是校验码。身份证号码具体编码原则,看下面内容:

18位公民身份证编码规则

18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确规定。GB11643- 1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外 GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其含义如下:
1. 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
2. 出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日分别用4位、2位、2位数字表示,之间不用分隔符。
3. 顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

校验的计算方式:
1. 对前17位数字本体码加权求和
公式为:S = Sum(Ai * Wi), i = 0, ... , 16
其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2. 以11对计算结果取模
Y = mod(S, 11)
3. 根据模的值得到对应的校验码
对应关系为:
    Y值: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2

关于18位身份证号码尾数是“X”的解释
居民身份证的号码是按照国家的标准编制的,由18位组成:前六位为行政区划代码,第七至第十四位为出生日期码,第15至17位为顺序码,第18位为校验 码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如 果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的 10,用X来代替10,可以保证公民的身份证符合国家标准。但是我国的居民身份证在升位后,一些人的尾号变成了X,这部分人在工作生活中,例如去银行存取 钱、去汽车公司租赁汽车或者报名参加考试等等过程中,往往不被检验者理解,认为是假身份证,这样的误会给很多人的生活带来不便。公安局的同志希望领到X身 份证的同志正确理解这个数字的含义,查验身份证的机关和单位更应该清楚这一点。
收到的鲜花
  • TonyDeng2012-01-24 01:35 送鲜花  10朵   附言:有用的資料
2012-01-24 01:29
lygcw9603
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:233
专家分:357
注 册:2006-8-27
收藏
得分:0 
续上
在输入过程中,第18位校验码是最关键的,千万不能输错。
2012-01-24 01:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 18楼 lygcw9603
這個資料極其有用。請問有沒有在拆分、合併行政區時,如何處理已發放身份證代碼的辦法?

授人以渔,不授人以鱼。
2012-01-24 01:37
快速回复:救助:如何对一个表中的身份证号进行判断。把错误的给导出来?
数据加载中...
 
   



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

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