以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 怎样提取后6位 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=25472)
|
-- 作者:良才
-- 发布时间:2012/11/9 22:11:00
-- 怎样提取后6位
此主题相关图片如下:qq截图20121109220420.png
怎样在表 身份证号列提取后6位到密码列
请师傅指点,谢谢!
|
-- 作者:y2287958
-- 发布时间:2012/11/9 22:21:00
--
substring
|
-- 作者:lin_hailun
-- 发布时间:2012/11/9 22:31:00
--
嗯嗯,直接 Right("123456", 3) 就行
Right(字符, 数量)
|
-- 作者:明丰
-- 发布时间:2012/11/9 22:32:00
--
\'表属性-数据-DataColChanged If e.DataCol.Name = "身份证号" Then If e.DataRow.IsNull("身份证号") Then e.DataRow("密码") = Nothing Else Dim d As String = e.DataRow("身份证号") If ValidPIN(d) Then \'d = d.SubString(d.length - 6,6)
d = right(d,6) \'这样简单点 e.DataRow("密码") = d Else messagebox.show("身份证号码不正确!") e.DataRow("密码") = Nothing End If End If End If
[此贴子已经被作者于2012-11-9 22:35:29编辑过]
|
-- 作者:良才
-- 发布时间:2012/11/9 22:49:00
--
谢谢!
If e.DataCol.Name = "身份证号" Then If e.DataRow.IsNull("身份证号") Then e.DataRow("密码") = Nothing Else Dim d As String = e.DataRow("身份证号") If ValidPIN(d) Then
d = right(d,6) \'这样简单点 e.DataRow("密码") = d Else messagebox.show("身份证号码不正确!") e.DataRow("密码") = Nothing End If End If End If
怎样18位可以,但还有15位就不行了。
|
-- 作者:明丰
-- 发布时间:2012/11/9 22:55:00
--
ValidPIN
用于校验身份证号码是否正确,如果正确,返回True,否则返回False。
如果“ValidPIN”函数出错,就要找狐爸了。(这个函数我也没测试过。)
|
-- 作者:hanxuntx
-- 发布时间:2012/11/9 22:58:00
--
身份证号码是18位的
直接substring(12,6)
|
-- 作者:明丰
-- 发布时间:2012/11/10 10:37:00
--
身份证号码15位、18位可以同时输入了,请各位测试。
\'表属性-数据-DataColChanged If e.DataCol.Name = "身份证号" Then If e.DataRow.IsNull("身份证号") Then e.DataRow("密码") = Nothing Else Dim d As String = e.DataRow("身份证号") For i As Integer = 0 To d.Length - 1 If Char.IsLetterOrDigit(d.Chars(i)) = False Then Messagebox.Show("身份证号码不正确!") e.DataRow("密码") = Nothing Return End If Next Dim r2,r3,r4,r5 As String If d.length = 15 Then Dim r1 As String = d.Substring(6,2) If r1 = "00" Then Else d = d.Insert(6,"19") r2 = StrReverse(d) For i As Integer = 17 To 1 Step -1 r3 = r2.Chars(i-1) r4 = r4 + ( r3 * ((2 ^ i) Mod 11 )) \'加权因子 Next End If r4 = r4 Mod 11 If r4 = "0" Then r4 = "1" ElseIf r4 = "1" Then r4 = "0" ElseIf r4 = "2" Then r4 = "X" ElseIf r4 = "3" Then r4 = "9" ElseIf r4 = "4" Then r4 = "8" ElseIf r4 = "5" Then r4 = "7" ElseIf r4 = "6" Then r4 = "6" ElseIf r4 = "7" Then r4 = "5" ElseIf r4 = "8" Then r4 = "4" ElseIf r4 = "9" Then r4 = "3" ElseIf r4 = "10" Then r4 = "2" End If r5 = d.SubString(d.length - 6,6) \'6位密码 d = d & r4 \'15位升18位 End If If ValidPIN(d) Then If r5 Is Nothing Then d = right(d,6) Else d = r5 End If e.DataRow("密码") = d Else messagebox.show("身份证号码不正确!") e.DataRow("密码") = Nothing End If End If End If
|
-- 作者:lin_hailun
-- 发布时间:2012/11/10 10:43:00
--
直接写一个15位的函数估计会更方便。
转换规则太繁琐了。
[此贴子已经被作者于2012-11-10 10:43:18编辑过]
|
-- 作者:明丰
-- 发布时间:2012/11/10 10:53:00
--
希望下次更新的时候,狐爸把15位身份证号码的判断也加进“ValidPIN”函数吧。
|