K7其他经典算法 得到验证码 出日期 加得到

K7其他经典算法 得到验证码 出日期 加得到

2020-10-23 23:03:12  鲸学教育

某日期加密授权码生成方法描述如下:
(1)授权码由10位字符组成,前8位为日期的密文,后2位为验证码;
(2)取日期的第1位字符,若该字符第一次出现,则直接取其对应加密字符,否则取下一个不重复的加密字符。按此操作,依次取出该日期余下各位对应的加密字符;
(3)求出所有日期字符数值的和,将和除16取余加1得到一位验证码;若和不小于16,则将和除16取整加1得到另一位验证码字符,否则另一位验证码字符为“X”。取出验证码重复时,处理规则与(2)相同。
加密(验证码)字符对应表如下:

小明设计了一个生成8位日期(YYYYMMDD格式)授权码的VB程序。程序功能如下:在文本框Text1中输入一个8位有效日期,单击“生成授权码”按钮Command1,在标签Label2中显示出该日期的授权码。运行效果如图所示。


实现上述功能的VB程序段如下: 
(1)请在画线处填入合适代码: 
Dim f(0 To 15)As Integer
Const Code=“KnGjLtWbOaPHZqYc”
Private Sub Command1_Click()
Dim rq As String,sq As String
Dim c As Integer,I As Integer,d As Integer
For i=0 To 15
f(i)=0
Next i
rq=Text1.text
sq=“”:d=0
If Len(rq)<>8 Then
Label1.Caption=“请输入8位日期!”
Else
For i=1 To 8
c=Val(Mid(rq,i,1))
d=d+c
sq=①______+sq
Next i
If d>=10 Then
yz=GetChar(d Mod 16+1)+GetChar(d\16+1)
Else
yz=GetChar(d Mod 16+1)+“X”
End i+
Label2.Caption=sq+yz
End If
End Sub
获取不重复的加密字符
Function GetChar(x As Integer)As String
Dim flag As Boolean
flag=False
Do While flag=False
f(x)=f(x)+1
If f(x)=1 Then
②______
f(x)=f(x)+1
flag=True
Else
x=(x+1)Mod 10
End If
Loop
End Function
(2)若输入的日期是“20170818”,则其授权码是______。


【答案】

(1)①GetChar(c)  (1分)
②GetCHar=Mid((Code,x+1,1)  (2分)
(2)aLOjbnKGZt(2分)

【本题解析】

本题考查加密算法以及自定义函数方法的使用。(1)①利用自定义函数方法获取日期对应数值c对应的加密字符,所以其表达式是GetChar(c)。②自定义函数GetChar()返回值(类型是string),功能是返回不重夏的加密字符,字符串Code第x个数字对应的加密字符。x的范围是0~15,因此转换时x需要加1才能得到Code中的字符。故答案是GetChar=Mid(Code,x+l,1)。(2)该加密算法的思想是变量sq采用字符串左边更新的方法,如果有重复的字符,则使用下一个未使用的值,以10为周期 (X=(x+1) Mod10)例如1到2,2到3.……,9到0,依此类推。将日期“20170818”代入代码进行计算可得到sq的结果为aLOjbnKG(由于变量sq左边更新,因此是倒序输出),需要注意的是其中“0”“8”“1”等几个字符是重复的,需要往后推一个值。最后的验证码,由于d=2+0+1+7+0+8+1+8=27,将其代人运算可以得到变量yz的结果为“Zt”。故本题最终结果为aLOjbnKGZt。


专注浙江信息技术辅导,通用技术辅导 鲸学,用心做好技术辅导

预约1对1