以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 身份证 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=178610) |
-- 作者:rgbjwjb -- 发布时间:2022/7/12 10:43:00 -- 身份证 我想把15位的身份证转换位18位的身份证,可否实现?请指教,谢谢! |
-- 作者:有点蓝 -- 发布时间:2022/7/12 11:01:00 -- https://www.baidu.com/baidu?ie=UTF-8&word=15%E4%BD%8D%E8%BA%AB%E4%BB%BD%E8%AF%81%E5%8F%B7%E7%A0%81%20%E8%BD%AC18%E4%BD%8D |
-- 作者:jygyyl -- 发布时间:2022/7/12 11:34:00 -- 回复:(rgbjwjb)身份证 If e.DataCol.name = "GB011" If e.DataRow.isnull("GB011") = False Dim sum,ai,n As Integer If len(e.DataRow("GB011")) > 15 If len(e.DataRow("GB011")) = 18 If IsNumeric(e.DataRow("GB011")) = True OrElse IsNumeric(left(e.DataRow("GB011"),17)) = True And right(e.DataRow("GB011"),1) = "X" Dim wi() As Integer = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2} For i As Integer = 0 To 16 ai = e.DataRow("GB011").SubString(i,1) sum = sum + ai*wi(i) Next n = sum Mod 11 Dim jym() As String = {"1","0","X","9","8","7","6","5","4","3","2"} If jym(n) = right(e.DataRow("GB011"),1) Dim y,m,d As Integer y = e.DataRow("GB011").SubString(6,4) m = e.DataRow("GB011").SubString(10,2) d = e.DataRow("GB011").SubString(12,2) If y > 1900 And y < 2100 And m > 0 And m < 13 If d > 0 And d <= Date.DaysInMonth(y,m) e.DataRow("GB012") = new Date(y,m,d) Else MessageBox.show("对不起,检测到该身份证号码持有人的出生日期的日数据不合法,请检查!","系统提示",MessageBoxButtons.OK, MessageBoxIcon.Information) Return End If Else MessageBox.show("对不起,检测到该身份证号码持有人的出生日期的月数据不合法,请检查!","系统提示",MessageBoxButtons.OK, MessageBoxIcon.Information) Return End If n = e.DataRow("GB011").SubString(16,1) Mod 2 If n = 1 e.DataRow("HGB002") = "男" Else e.DataRow("HGB002") = "女" End If Else MessageBox.show("对不起,该身份证号码无法通过验证,请检查!","系统提示",MessageBoxButtons.OK, MessageBoxIcon.Information) End If Else MessageBox.show("对不起,身份证号码字符格式不合法,请重新输入!","系统提示",MessageBoxButtons.OK, MessageBoxIcon.Information) End If Else MessageBox.show("对不起,身份证号码长度不合法,请重新输入!","系统提示",MessageBoxButtons.OK, MessageBoxIcon.Information) End If Else If len(e.DataRow("GB011")) < 15 MessageBox.show("对不起,身份证号码长度不合法,请重新输入!","系统提示",MessageBoxButtons.OK, MessageBoxIcon.Information) Else Dim y,m,d As Integer y = e.DataRow("GB011").SubString(6,2) y = 1900 + y m = e.DataRow("GB011").SubString(8,2) d = e.DataRow("GB011").SubString(10,2) If m > 0 And m < 13 If d > 0 And d <= Date.DaysInMonth(y,m) e.DataRow("GB012") = new Date(y,m,d) Else MessageBox.show("对不起,检测到该身份证号码持有人的出生日期的日数据不合法,请检查!","系统提示",MessageBoxButtons.OK, MessageBoxIcon.Information) Return End If Else MessageBox.show("对不起,检测到该身份证号码持有人的出生日期的月数据不合法,请检查!","系统提示",MessageBoxButtons.OK, MessageBoxIcon.Information) Return End If n = e.DataRow("GB011").SubString(14,1) Mod 2 If n = 1 e.DataRow("HGB002") = "男" Else e.DataRow("HGB002") = "女" End If End If End If Else e.DataRow("HGB002") = Nothing e.DataRow("GB012") = Nothing e.DataRow("籍贯") = Nothing End If End If If e.DataCol.name = "GB012" If e.DataRow.isnull("GB012") = False Dim tp As TimeSpan = Date.today - CDate(e.DataRow("GB012")) e.DataRow("年龄") = Math.Round(tp.TotalDays / 365.2422,2) Else e.DataRow("年龄") = Nothing End If End If Select Case e.DataCol.name Case "GB011" If e.DataRow.IsNull("GB011") Then e.DataRow("籍贯") = Nothing Else Dim bm As String = e.DataRow("GB011").SubString(0,6) Dim dr As DataRow = DataTables("ybsj").SQLFind("代码 = \'" & bm & "\'") If dr IsNot Nothing Then e.DataRow("籍贯") = dr("地址") End If End If End Select |
-- 作者:rgbjwjb -- 发布时间:2022/7/12 14:58:00 -- 谢谢! |