题库 高中信息

题干

条形码是按照一定编码规则排列的图形标识符。如右图所示,条形码下方数字左边12位代表信息,最右边一位是校验码。校验码产生方法如下:

①把条形码下方数字从右往左依次编序号为“1,2,3,4……”;
②从序号2开始把所有偶数序号位上的数相加求和,并乘以3;
③从序号3开始把所有奇数序号上的数相加求和;
④把第②和第③步结果相加求和;
⑤10减去第④步结果的个位数,得出校验码(如果差值为10,则校验码为0);
如条形码的数字为:977167121601X(X为校验码),则校验码主要产生步骤如下:
1) (1+6+2+7+1+7)×3=72
2) 0+1+1+6+7+9=24
3) 72+24=96
4) 10-6=4
所以最后校验码X=4,此条形码数字为9771671216014。
小何为此编写了VB程序,用以验证条形码输入正确与否。程序运行时,从文本框Text1获取条形码数字部分,单击按钮Command1后,在列表框List1中输出结果。实现上述功能的VB代码如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim i As Integer, b As String, Lb As Integer
Dim s1 As Integer, s2 As Integer, tmp As Integer
Dim c As String
Dim d(1 To 13) As Integer '存储数据
Dim res As String '存储结果
b =" Text1.Text" '输入
Lb = Len(b)
s1 =" 0" : s2 = 0
flag = True
res = "输入错误!"
If Lb =" 13" Then
For i =" 1" To 13
c =" Mid(b," Lb - i + 1, 1)
If c >= "0" And c <= "9" Then
d(i) =" Val(c)" '输入转换
Else
flag =" False" : Exit For
End If
Next i
If flag Then
For i =" 2" To Lb Step 2
s1 =  s1 + d(i) '参数计算1
s2 =s2 + d(i) '参数计算2    ①
Next i
tmp =" s1" * 3 + s2
If tmp Mod 10    Then res = "输入正确!"  ②
End If
End If
List1.AddItem res
End Sub
上一题 下一题 0.99难度 简答题 更新时间:2017-02-17 10:17:00

答案(点此获取答案解析)

同类题5

我国居民身份证号是由 18 位字符组成,其中前 17 位是数字,第 18 位是校验位(校验
位字符在“0”~“9”或“X”中选取)。由前 17 位数字经过一定的规则计算得到校验值, 在查验居民身份证号有效性时,如果校验位中的字符与计算所得校验值相等则身份证号有效, 否则无效。
校验值计算规则如下:
第一步:将身份证号前 17 位数字分别乘以不同的系数后相加,对应系数如下表所示。
位数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
系数
7
9
10
5
8
4
2
1
6
3
7
9
10
5
8
4
2
 
第二步:将第一步的计算结果除以 11,得到余数。 第三步:根据第二步的计算结果从下表获取对应的校验值。
余数
0
1
2
3
4
5
6
7
8
9
10
校验值
1
0
X
9
8
7
6
5
4
3
2
 
例如:某身份证号为 34052419800101001X。要计算此身份证的校验值步骤如下: 第一步:计算 3*7+4*9+0*10+5*5+……+1*2=189
第二步:189 除以 11 得到余数为 2
第三步:由余数 2 获取校验值 X。
根据以上规则小王编写了一个验证身份证号是否有效的 VB 程序,功能如下:在文本框 Text1 中输入身份证号,单击“验证”按钮 Command1 后,在列表框 List1 中显示验证结果。 程序运行界面如图1 所示。
(1)设计程序界面时,应使用图 2 中的____(填写相应编号)添加列表框对象 List1。

(2)实现上述功能的 VB 程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim i As Integer, a As Integer, b As Integer, sum As Integer, pos As Integer
Dim idCode As String, result As String
Const xs = "0709100508040201060307091005080402"    '存储前 17 位每位系数
Const checkCodeStr = "10X98765432"    '存储余数对应的检验值
①________
sum = 0
For i = 1 To 17 Step 1
a = Val(Mid(idCode, i, 1))
b = ②________
sum = sum + a * b
Next i
pos =
checkCode = Mid(checkCodeStr, pos, 1)
If checkCode = Mid(idCode, 18, 1) Then
result = "有效"
Else
result = "无效"
End if
List1.AddItem (idCode & "    " & result)
End Sub
(3)程序中加框处代码有误,应修改为________。