阅读以下说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。 [说明] 我国现行使用的公民身份证号码有两种,分别遵循两个国家标准:〖GB 11643-1989〗和〖GB 11643-1999〗。〖CB 11643-1989〗

admin2009-02-15  41

问题 阅读以下说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。
[说明]
   我国现行使用的公民身份证号码有两种,分别遵循两个国家标准:〖GB 11643-1989〗和〖GB 11643-1999〗。〖CB 11643-1989〗中规定的是15位身份证号码,排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。〖GB 11643 -1999〗中规定的是18位身份证号码,是特征组合码,它由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其中,校验码C由本体码按如下过程求得:
   (1)计算校验码和S=a18W18+a17W17+…+a2W2,其中i表示18位身份证号,码每一位的序号,从右至左,最左侧为18,最右侧为1;ai表示身份证号码第i位上的号码;wi表示第i位上的权值,其值为2i-1模11的结果;
   (2)计算校验码值R,其值为校验和模11的结果;
   (3)根据下面对应关系找出校验码C:

由上述计算过程可以看出,18位身份证号码中可能包含非数字的字母X(代表数字10)。下面的应用程序基于这一算法实现了身份证号码的升位查询:
   
   在开发过程中,显示新旧两种身份证号码的文本框(TextBox)分别名为Text1和Text2,“号码升位”按钮(CommandButton)名为Command1。
   代码中使用到的字符串函数及功能说明如下:
   (1)Len(s):获取字符串s的长度;
   (2)Left(s,1):返回字符串s左端长度为1的子串;
   (3)Right(s,1):返回字符串s右端长度为1的子串;
   (4)Mid(s,p,1):返回字符串s从第P个字符开始长度为1的子串。
[Visual Basic代码]
’计算18位身份证号码
Private Sub Commandl_Click()
     Dim code As String
    Dim S As Integer
    code = Textl. Text         ’提取15位身份证号码
    If Len(code) < > 15 Then
     MsgBox "ID 号码长度不正确,请检查!"
       (1)  
    End If
    code = Left(code, 6) + "19" +  (2)  (code, 9)     ’年份升位
    S=0
    For i = 18 To 2 Step -1    ’计算校验码和
       S = S + Clnf((3)) * (2 ^ (i - 1) Mod11)
    Next i
       (4)               ’计算校验码值
    Select Case S                ’确定校验码
    Case 0:       code = code + "1"
    Case 1:       code = code + "0"
    Case 2:       code = code + "X"
    Case Else:    code = code + CStr((5))
    End Select
    Text2. Text = code         ’显示18位身份证号码
End Sub

选项

答案(1)Exit Sub(2)Right(3)Mid(code,19-i,1) (4)S=S Mod 11 (5)12-S

解析 (1)输入错误时,应即刻退出过程;
(2)注意到“19”是夹在15位身份证号码左端6位与右端9位之间的,按照参数调用格式可以推断此处函数是Right;
(3)此处应填入身份证号码中第i位(从左端起、序号自18递减)上的号码,它位于字符串code的第19-i位(从左端起、序号自1递增),因此可用Mid(code, 19-i,1)来获取;
(4)略;
(5)从校验码值与校验码的转换关系可知:当校验码值大于等于3时,校验码值与校验码之和为12。
转载请注明原文地址:https://jikaoti.com/ti/HrW7FFFM
0

最新回复(0)