[VB.net][VB6][VBA]「動態密碼」和「不用輸入欄位」的密碼輸入技巧
刻板模式
在需要輸入密碼的場合常見到介面上會有一個類似「管理人登入」的按鈕,按下後再彈出一個「密碼輸入文字框」,輸入時再用「*」或「●」顯示已輸入的字元,如果輸入錯誤時再彈出「密碼不正確」的訊息,好像大多都是如此…
來個另類思考吧
這個另類方式可以完全隠匿輸入密碼的 UI,讓輸入動作可用悄悄話進行,在人前可以堂而皇之即便是被看到全部輸入過程也無妨。
下面的程式用當下的時間和字串 12345 組成一組動態密碼,至於如何演算產生目的密碼則完全隨意。輸入時先用眼角餘光瞄一下右下角的時間,稍加轉換算出當時的密碼然後直接輸入就行了。
Imports Microsoft.VisualBasic
Public Class Form1
Const def_Password = "12345"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
KeyPreview = True
Button1.Visible = False
End Sub
Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
'---用靜態變數存放 User 已輸入的字串---
Static pwd As String = ""
'---將當下時間納入為密碼的一部分---
Dim p1 = Format(Now, "mmhh") & def_Password
'---每次 KeyPress 事件發生時都進行比對---
Dim L = Len(p1)
For i = 1 To L
If pwd = Microsoft.VisualBasic.Left(p1, L - i) Then
If e.KeyChar = Mid(p1, L + 1 - i, 1) Then
'---若字元正確就納入暫存變數---
pwd = Microsoft.VisualBasic.Left(p1, L + 1 - i)
Else
'---輸入過程中有任一字元不正確就全部重來---
pwd = ""
End If
End If
Next
'---完全輸入正確時---
If pwd = p1 Then
MsgBox("歡迎管理人大駕光臨...")
Button1.Visible = True
pwd = ""
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
sender.Visible = False
End Sub
End Class
參考附圖:
這個 demo 的動態密碼是用當下時間的「時」和「分」及「12345」 組成,例如時間是 10:05 那密碼就是「051012345」。