嘉定都市网

标题: 懂VB的进来帮偶看下 [打印本页]

作者: 元宝妹妹    时间: 2005-1-13 21:50
标题: 懂VB的进来帮偶看下
Function IDCode15to18(sCode15 As String) As String
  '* 功能:将15的身份证号升为18位(根据GB 11643-1999)
  '* 参数:原来的号码
  '* 返回:升位后的18位号码
  Dim i As Integer
  Dim num As Integer
  Dim code As String
  num = 0
  IDCode15to18 = Left(sCode15, 6) + "19" + Right(sCode15, 9)
  ' 计算校验位
  For i = 18 To 2 Step -1
   num = num + (2 ^ (i - 1) Mod 11) * (Mid(IDCode15to18, 19 - i, 1))
  Next i
  num = num Mod 11
  Select Case num
  Case 0
   code = "1"
  Case 1
   code = "0"
  Case 2
   code = "X"
  Case Else
   code = Trim(Str(12 - num))
  End Select
  IDCode15to18 = IDCode15to18 + code
End Function



网上找的一个身份证15位转18位的函数
偶有点看不太懂 谁帮偶做个注释   
       

此贴由 元宝妹妹 在 2005-01-13 21:52:07 最后编辑
作者: 豕是猪的上帝    时间: 2005-1-13 22:22
从定义变量开始,帮你一句一句的解释:
定义 I 为整形
定义 num 为整形
定义 code 为字符串

初始化 i 赋值为0

函数返回字符串赋值为传递参数(sCode 字符串型)的左边6个字符,连接“19”字符,再连接sCode右边起9个字符。
假设sCode="310114780405002",执行到这里,返回值
IDCode15to18="31011419780405002"
这里的代码有点不太严谨。连接字符串最好使用
IDCode15to18 = Left(sCode15, 6) & "19" & Right(sCode15, 9)
这个时候 IDCode15to18 还是17位

校验码的计算:
2的N次方(N=17 to 1)除以 11 ,取余数乘以 IDCode15to18 从第一位开始的数字字符。将所得结果存放到 num 累加器。
又不够严谨!
num = num + (2 ^ (i - 1) Mod 11) * Cint((Mid(IDCode15to18, 19 - i, 1)))

将 num 累加器里的值再除以 11 取余数,将结果存放到num中。

如果余数为 0 则 IDCode15to18 末尾连接 "1"
如果余数为 1 则 IDCode15to18 末尾连接 "0"
如果余数为 2 则 IDCode15to18 末尾连接 "X"
其他的则 IDCode15to18 末尾连接 将(12-num)的结果转化成的字符串。

将最后结果返回。

OK,解释完毕!




作者: 元宝妹妹    时间: 2005-1-13 22:31
偶像啊~~~~ THX啦~~~
作者: 类xiaofeng_yh    时间: 2005-1-14 12:38
有点不理解,为什么vb替代c语言成了大学计算机基础课成
作者: 真肥    时间: 2005-1-14 13:52
原文由 类xiaofeng_yh 在 2005-01-14 12:38:37  发表
有点不理解,为什么vb替代c语言成了大学计算机基础课成

哪个学校?我至少还是学C的。
作者: 类xiaofeng_yh    时间: 2005-1-14 13:54
原文由 真肥 在 2005-01-14 13:52:04  发表

哪个学校?我至少还是学C的。

很多都是啊
除了计算机专业的
非计算机专业的现在学编程语言都是先学vb了
以前应该是学c的吧
作者: 真肥    时间: 2005-1-14 14:02
我是非计算机专业的。不过2年前学的了。现在不知道,应该还是C吧。




欢迎光临 嘉定都市网 (http://www.jiading.com.cn/) Powered by Discuz! X3.1