回 帖 发 新 帖 刷新版面

主题:查询身份证信息源代码(添校验功能),和身份证号与区域对照表

数据表是根据:
中华人民共和国国家统计局,最新县及县以上行政区划代码(截止2006-12-31 08:56:35)整理的。

[color=008080][size=5]查询身份证信息源代码在六楼。[/size][/color]

[color=0000FF][size=4]源代码修改通知:
根据 0901chang 先生 2007-7-9 无私贡献的代码:
      增添了核对校验码功能:
根据 jinlonggao 和 esailor 两位先生 2007-7-9 纠错指导:
      修改了 18 位身份证性别出错的问题。
根据 esailor 先生 2007-7-8  意见;
      添加了在众多表中自动搜索配套数据表功能。
[/size]
[size=5]对以上高手,我表示衷心得感谢!!![/size][/color]

[color=FF0000][size=4]凡是回帖说明使用结果者,或发表评论新帖子者, [/size] [/color] [color=0000FF][size=3]请将你的电子信箱号码发到。我的论坛信箱。我将不定期赠送不常见的编程实例。[/size][/color]
如:
在 vfp 中,怎样以控件方式操作运行 word 或 excel。
在 vfp 中,怎样构造各种最新界面。
怎样真正使用以数据库为中心的编程方法。
怎样维护和操作:windows 的各种进程。……
vfp 之所以强大,它不但是数据库编程环境,而且有强大的编程环境。别的语言能实现的功能 vfp 都能实现,这是我使用的 20 多年的编程经验。

回复列表 (共69个回复)

沙发

下载了,顶一下

板凳

楼主辛苦了

3 楼

对不起!
地址发生错误!
城市名没添加。
修改后,听通知再下载!!!

4 楼

好的.谢谢楼主.

5 楼

由于信息来源于国家统计局最新版本,和原来不同,出现失误,请大家谅解!!!
现在基本上没问题,如果使用中,有问题请给予指点,老衲在此谢谢大家了。

以下我用类代码,编了一套使用的表单,还请大家多提意见为盼!!!

将该代码直接复制到一个 *.prg 程序文件中,和下载的数据表,放在同目录下即可。
运行环境:xp 加 vfp 9
其它环境未测试!!!

6 楼

PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.Show
RETURN
DEFINE CLASS form1 AS form
Height = 235
Width = 395
DoCreate = .T.
ShowTips = .T.
AutoCenter = .T.
Caption = "身份证信息"
TitleBar = 0
BackColor = RGB(255,0,255)
AllowOutput = .F.
Name = "Form1"
ADD OBJECT shape1 AS shape WITH ;
Top = 10, ;
Left = 5, ;
Height = 221, ;
Width = 386, ;
BackStyle = 0, ;
BorderWidth = 5, ;
Curvature = 50, ;
Enabled = .T., ;
SpecialEffect = 0, ;
BorderColor = RGB(79,79,79), ;
Name = "Shape1"
ADD OBJECT shape2 AS shape WITH ;
Top = 6, ;
Left = 4, ;
Height = 221, ;
Width = 383, ;
BackStyle = 1, ;
Curvature = 50, ;
Enabled = .T., ;
SpecialEffect = 0, ;
BackColor = RGB(172,255,172), ;
BorderColor = RGB(79,79,79), ;
Name = "Shape2"
ADD OBJECT label0 AS label WITH ;
AutoSize = .F., ;
FontName = "楷体_GB2312", ;
FontSize = 16, ;
BackStyle = 0, ;
Caption = "所属区域:", ;
Height = 28, ;
Left = 24, ;
Top = 104, ;
Width = 96, ;
ForeColor = RGB(0,0,255), ;
Name = "Label0"
ADD OBJECT label2 AS label WITH ;
AutoSize = .T., ;
FontName = "楷体_GB2312", ;
FontSize = 16, ;
BackStyle = 0, ;
Caption = "出生日期:", ;
Height = 26, ;
Left = 24, ;
Top = 156, ;
Width = 112, ;
ForeColor = RGB(0,0,255), ;
Name = "Label2"
ADD OBJECT label3 AS label WITH ;
AutoSize = .T., ;
FontName = "楷体_GB2312", ;
FontSize = 16, ;
BackStyle = 0, ;
Caption = "性  别  :", ;
Height = 26, ;
Left = 24, ;
Top = 189, ;
Width = 112, ;
ForeColor = RGB(0,0,255), ;
Name = "Label3"
ADD OBJECT shape3 AS shape WITH ;
Top = 25, ;
Left = 24, ;
Height = 66, ;
Width = 349, ;
SpecialEffect = 0, ;
BackColor = RGB(255,255,221), ;
Name = "Shape3"
ADD OBJECT label4 AS label WITH ;
AutoSize = .T., ;
FontName = "宋体", ;
FontSize = 12, ;
BackStyle = 0, ;
Caption = "请输入身份证号码:", ;
Height = 20, ;
Left = 124, ;
Top = 30, ;
Width = 146, ;
ForeColor = RGB(0,0,255), ;
Name = "Label4"
ADD OBJECT text1 AS textbox WITH ;
FontSize = 22, ;
Height = 35, ;
InputMask = "99999999999999999N", ;
Left = 56, ;
MaxLength = 18, ;
ToolTipText = "按回车或鼠标单击本编辑框外《确定》。", ;
Top = 50, ;
Width = 283, ;
BackColor = RGB(196,255,255), ;
Name = "Text1"
ADD OBJECT com1 AS commandbutton WITH ;
Top = 192, ;
Left = 324, ;
Height = 25, ;
Width = 49, ;
Caption = "退出", ;
Name = "com1"
ADD OBJECT label1 AS editbox WITH ;
FontSize = 12, ;
Height = 45, ;
Left = 120, ;
ReadOnly = .T., ;
ScrollBars = 0, ;
Top = 99, ;
Width = 252, ;
DisabledBackColor = RGB(255,230,255), ;
Name = "Label1"
PROCEDURE Unload
USE IN biao3
ENDPROC
PROCEDURE Init
lj=JUSTPATH(SYS(16,1))
CD SUBSTR(lj,AT(":\",lj)-1)
IF ! USED("biao3")
FOR i=1 TO ADIR(cDir,"*.dbf")
USE (cDir[i,1]) IN 0 AGAIN ALIAS biao3
IF FIELD(1)=="地址"
RETURN
ELSE
USE IN biao3
ENDIF
ENDFOR
ELSE
RETURN
ENDIF
MESSAGEBOX("找不到数据表!",16,"温馨提示")
ENDPROC
PROCEDURE text1.Init
this.Value="150303198309280114"
ENDPROC
PROCEDURE text1.Valid
WITH thisform
o1=SYS(1270)
IF TYPE("o1")="O" AND o1.name="com1"
RETURN
ENDIF
c1=TRIM(.text1.Value)
.text1.tag=.text1.Value
IF ! INLIST(LEN(c1),15,18)
MESSAGEBOX("请输入 15 或 18 位的身份证号码!",16,"温馨提示")
RETURN .F.
ENDIF
SELECT biao3
c2=LOOKUP(地址,LEFT(c1,6),区域代码)
IF EMPTY(c2)
.text1.InteractiveChange()
MESSAGEBOX("没有《"+c1+"》身份证号码!",16,"温馨提示")
RETURN .F.
ELSE
.label1.value=c2
IF LEN(c1)=15
c2=SUBSTR(c1,7,6)
.label3.Caption="性  别  :"+IIF(INT(VAL(RIGHT(c1,1)))%2=0,"女","男" )
.label2.Caption=LEFT(c2, LEN(c2)-4)+"年"+SUBSTR(c2, LEN(c2)-3, 2)+ "月"+RIGHT(c2,2)+"日"
ELSE
LOCAL r1,i
r1=0   && 计算校验位
FOR i=18 TO 2 STEP -1
r1=r1+ VAL(SUBSTR(c1,19-i,1)) * 2^(i-1)%11
NEXT
r1=r1%11
IF ! IIF(r1=0,"1", IIF(r1=1,"0", IIF(r1=2,"X", LTRIM(STR(12-r1)))))==RIGHT(c1,1)
.text1.InteractiveChange()
MESSAGEBOX("验校《"+c1+"》身份证号码失败!",16,"温馨提示")
RETURN .F.
ENDIF
c2=SUBSTR(c1,7,8)
.label3.Caption="性  别  :"+IIF(INT(VAL(SUBSTR(c1,17,1)))%2=0,"女","男" )
.label2.Caption=LEFT(c2, LEN(c2)-4)+"年"+SUBSTR(c2, LEN(c2)-3, 2)+ "月"+RIGHT(c2,2)+"日"
ENDIF
ENDIF
ENDWITH
RETURN
ENDPROC
PROCEDURE label2.Caption_Assign
LPARAMETERS cNewValue
IF cNewValue=="出生日期:"
this.Caption=cNewValue
ELSE
c1=IIF(LENC(cNewValue)=9,"20","")+CHRTRANC(cNewValue,"年月日","..")
={^&c1.}
this.Caption="出生日期:"+cNewValue
ENDIF
ENDPROC
PROCEDURE label2.Error
LPARAMETERS nError, cMethod, nLine
WAIT WINDOW MESSAGE() NOWAIT
WITH this.Parent
.label1.Value=""
.label2.Caption="出生日期:"
.label3.Caption="性  别  :"
ENDWITH
RETURN TO MASTER
ENDPROC
PROCEDURE text1.KeyPress
LPARAMETERS nK, nShiftAltCtrl
WITH This
DO CASE
CASE nK=13
.Valid()
CASE LEN(TRIM(.Value))=18 AND ISALPHA(CHR(nK))
.Value=STUFF(.Value, 18, 1, "X")
ENDCASE
ENDWITH
ENDPROC
PROCEDURE text1.InteractiveChange
WITH thisform
LOCAL c1
c1=TRIM(.text1.value)
IF LEN(c1)=18 OR (LEN(c1)=15 AND ! INLIST(SUBSTR(.text1.value,7,2),"19","20"))
.text1.Valid()
RETURN
ENDIF
IF ! EMPTY(".text1.tag")
.label1.value=""
.label2.Caption="出生日期:"
.label3.Caption="性  别  :"
.text1.tag=""
RETURN
ENDIF
ENDWITH
ENDPROC
PROCEDURE com1.Click
thisform.Release
ENDPROC
ENDDEFINE

7 楼

谢谢cbl518老师提供!

8 楼

楼主辛苦了
十分感谢

9 楼


[color=FF0000]IF n1>=1[/color]
IF ! USED("biao3")
    USE (cDir[1,1]) IN 0 AGAIN ALIAS biao3
ENDIF
ELSE
MESSAGEBOX("找不到数据表!",16,"温馨提示")
RETURN

我的测试目录下还有其它表,改成这样就能继续执行
只是提示“找不到变量‘地址’”

10 楼

我要求的是与程序同目录下只能有一个任意表名的配套表。你修改了代码。虽然打开了表,但是不是所需要得配套表。所以会出现该问题。


[color=FF0000][size=5]我已修改,可以在任意名,在众多数据表里的情况下,自动辨别配套数据表!!![/size][/color]

我来回复

您尚未登录,请登录后再回复。点此登录或注册