Option Explicit
Sub SetupScreen()
txtRandomNumber.Text = ""
txtCheckDigit.Text = ""
txtIDCard.Text = ""
End Sub
' ########################################################
' ¤ÅÔê¡»ØèÁà¾×èÍ·Ó¡ÒÃÊØèÁËÁÒÂàÅ¢ºÑµÃ»ÃЪҪ¹
Private Sub cmdRandom_Click()
' ########################################################
Dim Sum As Integer
Dim Count As Byte
Call SetupScreen
' ÊØèÁËÒµÑÇàÅ¢ÁÒ·Ñé§ËÁ´ 12 ËÅÑ¡ â´Â·ÕèËÅÑ¡ááµéͧäÁèãªè 0 áÅÐ 9 ´éÇÂ
' àÃÕ¡ä»Âѧ¿Ñ§¤ìªÑè¹ RandomNumber â´ÂäÁèÁÕ¡ÒÃÊ觤èÒã´æä» áµè¨ÐµéͧÃѺ¤èÒ·Õèä´é¡ÅѺÁÒ
txtRandomNumber.Text = RandomNumber
' ËÅÑ¡¤Ô´ÊÓËÃѺ 12 ËÅÑ¡áá
' àÃÔèÁµé¹¤Ó¹Ç³ËÒ¤èÒ¼ÅÃÇÁµÑÇàÅ¢·Ñé§ 12 ËÅÑ¡áá ´Ñ§¹Õé
' ËÒ¼ÅÃÇÁµÑé§áµèËÅÑ¡·Õè 1 仨¹¶Ö§ËÅÑ¡·Õè 12 (¹Ñº¨Ò¡«éÒÂ仢ÇÒ)
' â´ÂãËéËÅÑ¡·Õè 1 ¤Ù³´éǹéÓ˹ѡ»ÃШÓËÅÑ¡ = 13
' â´ÂãËéËÅÑ¡·Õè 2 ¤Ù³´éǹéÓ˹ѡ»ÃШÓËÅÑ¡ = 12
' â´ÂãËéËÅÑ¡·Õè 3 ¤Ù³´éǹéÓ˹ѡ»ÃШÓËÅÑ¡ = 11
' â´ÂãËéËÅÑ¡·Õè .. ¤Ù³´éǹéÓ˹ѡ»ÃШÓËÅÑ¡ = ..
' â´ÂãËéËÅÑ¡·Õè 12 ¤Ù³´éǹéÓ˹ѡ»ÃШÓËÅÑ¡ = 2
' ¨Ò¡¹Ñ鹹ӼšÒäٳ¢Í§áµèÅÐËÅÑ¡ÁÒÃÇÁ¡Ñ¹à¢éÒä»
' ËÅÑ¡áµèÅÐËÅÑ¡ ¤×Í Val(Mid$(txtIDcard.Text, Count, 1))
' ¹éÓ˹ѡ¢Í§áµèÅÐËÅÑ¡ ¤×Í (14 - Count) àÁ×èÍ Count àÃÔèÁµé¹¨Ò¡ 1 ä»ÊÔé¹ÊØ´·Õè 12
' ´Ñ§¹Ñ鹤èÒ¹Õé (14 - Count) ¨Ö§àÃÔèÁµé¹¤èÒ¨Ò¡ 13, 12, 11, ..., ÊÔé¹ÊØ´·Õè 2 ¤ÃѺ¼Á
Sum = 0 ' Clear ¤èÒ¼ÅÃÇÁ¡è͹ (à¾×èͤÇÒÁá¹èã¨)
For Count = 1 To 12
Sum = Sum + Val(Mid$(txtRandomNumber.Text, Count, 1)) * (14 - Count)
Next
' ########################################################
' ¢Ñ鹵͹¹Õé ¤×Í ¡ÒÃËÒ¤èÒ Check Digit ËÃ×Í ËÅÑ¡µÃǨÊͺ¤ÇÒÁ¶Ù¡µéͧ
' ¹Ó¼ÅÃÇÁ·Õèä´é (Sum) ÁÒ Mod (¡ÒÃËÒÃàÍÒàÈÉ) ´éÇ 11 ¹Ñ蹤×ͤèÒ·ÕèàÃÒ¨Ðä´é¡ç¤×Í 0, 1, 2, .. , 10 (Sum Mod 11)
' ¨Ò¡¹Ñé¹ãËéźÍÍ¡´éÇ 11 ¡ç¨Ð·ÓãËéä´é¤èÒµÑé§áµè 1, 2, 3, ... , 11 (11 - (Sum Mod 11))
' áÅéÇãËéàÅ×Í¡µÑÇ¢ÇÒÁ×ÍÊØ´ÁÒ˹Öè§µÑÇ ´éǤÓÊÑè§ Right$ --> Right$(Str(11 - Sum Mod 11)), 1)
' ¤èÒÊØ´·éÒ¹Õé¡ç¤×Í ËÅÑ¡·Õè 13 ËÃ×Í ËÅÑ¡µÃǨÊͺ¤ÇÒÁ¶Ù¡µéͧ (Check Digit) ¹Ñè¹àͧ
'
txtCheckDigit.Text = Right$(Str(11 - (Sum Mod 11)), 1)
'
' ########################################################
' ########################################################
' àÍÒ¤èÒÁҨѴàÃÕ§à¾×è͹Óä»ãªé㹡ÒÃÊÁѤÃàÅè¹à¡ÁÊìµèÍä» ... 55555+
'
txtIDCard.Text = txtRandomNumber.Text & txtCheckDigit.Text
'
' ########################################################
End Sub
' ########################################################
' ¿Ñ§¤ìªÑè¹·Õèãªé㹡ÒÃÊØèÁµÑÇàÅ¢¨Ó¹Ç¹ 12 ËÅÑ¡ äÁèÁÕ¡ÒÃÃѺ¤èÒ áµè¨ÐµéͧÊ觤èҤ׹¡ÅÑºä» (Return)
' ´Ñ§¹Ñé¹àÃÒµéͧãªéà»ç¹áºº¿Ñ§¤ìªÑè¹ (Function) ¨Ðãªé Sub Program äÁèä´é
'
Function RandomNumber() As String
'
' ########################################################
' à¾×èͺ觺͡ÇèÒËÅÑ¡ááËÒ¤èÒä´éÊÓàÃç¨áÅéÇËÃ×ÍäÁè
Dim blnFlag As Boolean
Dim i As Byte
' àÃÔèÁµé¹ã¹¡ÒÃÊØèÁµÑÇàÅ¢¡è͹
Randomize
' ÊٵáÒÃÊØèÁµÑÇàÅ¢ àÁ×èÍ High = ¤èÒÊÙ§ÊØ´ áÅÐ Low = ¤èÒµèÓÊØ´
'RandomNumber = Int((High - Low + 1) * Rnd) + Low
' µÑ駤èÒà»ç¹ False äÇé¡è͹
blnFlag = False
' ÊØèÁàÅ¢¨Ó¹Ç¹ 12 ËÅÑ¡ â´Â·ÕèËÅÑ¡ááµéͧäÁèãªè 0 áÅÐ 9
' à¹×èͧ¨Ò¡àÃÒãªé¡ÒùѺàÃÔèÁµé¹¨Ò¡ 1 ä»ÊÔé¹ÊØ´·Õè 12 â´ÂÁÕ¤èÒà¾ÔèÁ¢Öé¹·ÕÅÐ 1 ... àËÁÒÐÊÁ·Õè¨Ðãªé For
For i = 1 To 12
' Not False ËÃ×Í äÁè¨ÃÔ§ ¡ç¤×Í à·ç¨ (ËÃ×Íà¢Õ¹ blnFlag = False) ... áÊ´§Çèҵ͹¹ÕéàÃÒ¡ÓÅѧ¨ÐËÒµÑÇàÅ¢ËÅÑ¡ááÍÂÙè
If Not blnFlag Then
' ÊØèÁµÑÇàÅ¢ËÅÑ¡áá µéͧäÁèãËéÁÕ¤èÒà»ç¹ 0 áÅÐ 9 ... ¹Õè¤×Í¡Ò÷ӫéÓ ËÃ×Í Repetitive
' ãªé¡ÒÃǹÃͺ (Loop) Ẻ For ¨ÐäÁèàËÁÒÐÊÁÊÓËÃѺ§Ò¹¹Õé à¾ÃÒÐàÃÒäÁèÃÙé¤èÒàÃÔèÁµé¹ ¤èÒÊÔé¹ÊØ´ áÅÐ ¤èÒà¾ÔèÁ (ËÃ×ÍÅ´)
' áµèÁѹ¡ç¹ÓÁÒãªéä´éàËÁ×͹¡Ñ¹¹èФÃѺ à¾ÃÒÐÁѹÁÕ¤ÓÊÑè§ãËéÍÍ¡¨Ò¡ Loop ´éÇ Exit For ÍÂÙè
Do
' ºÇ¡ 0 ź 0 äÇéà·èæ ... ÍÔÍÔÍÔÍÔÍÔ
RandomNumber = Int((9 - 0 + 1) * Rnd) + 0
' ·Ó¨¹¡ÇèÒËÅÑ¡ááµéͧäÁèà·èҡѺ 0 áÅÐ 9 (à§×è͹䢵éͧãªé AND)
' àªè¹ àÁ×èÍ RandomNumber ÁÕ¤èÒ = 1
' ·ÓãËéä´éà§×èÍ¹ä¢ 1 <> 0 áÅÐ 1 <> 9 (True AND True = True) ... à§×è͹ä¢à»ç¹ "¨ÃÔ§" ãËéÍÍ¡¨Ò¡ Loop
' ËÃ×Í àÁ×èÍ RandomNumber ÁÕ¤èÒ = 9
' ·ÓãËéä´éà§×èÍ¹ä¢ 9 <> 0 áÅÐ 9 <> 9 (True AND False = False) ... à§×è͹ä¢à»ç¹ "à·ç¨" ãËéǹ Loop µèÍä»
Loop Until RandomNumber <> 0 And RandomNumber <> 9
' ËÃ×Í ãªéà§×èÍ¹ä¢ Until áµè¡ÅѺ¡Ñ¹´éÇ Not ... ¤¹·Õèà¢Õ¹Ẻ¹ÕéÊèǹãËè¨Ðà»ç¹¾Ç¡ÃдѺÍÒªÕ¾¤ÃѺ ... àª×èÍÁÑéÂ
'Loop Until Not RandomNumber = 0 And Not RandomNumber = 9
' ËÃ×Íãªé While áµèà§×è͹䢵éͧ¡ÅѺ¡Ñ¹¡Ñºáºº Until áÅеéͧãªé OR á·¹·Õè
' àªè¹ àÁ×èÍ RandomNumber ÁÕ¤èÒ = 1
' ·ÓãËéä´éà§×èÍ¹ä¢ 1 = 0 ËÃ×Í 1 = 9 (False OR False = False) ... à§×è͹ä¢à»ç¹ "à·ç¨" ãËéÍÍ¡¨Ò¡ Loop
' ËÃ×Í àÁ×èÍ RandomNumber ÁÕ¤èÒ = 9
' ·ÓãËéä´éà§×èÍ¹ä¢ 9 = 0 ËÃ×Í 9 = 9 (False OR True = True) ... à§×è͹ä¢à»ç¹ "¨ÃÔ§" ãËéǹ Loop µèÍä»
'Loop While RandomNumber = 0 Or RandomNumber = 9
' á¨é§ÇèÒËÅÑ¡ááËÒµÑÇàÅ¢·ÕèäÁèãªè 0 ËÃ×Í 9 àÊÃç¨ÊÁºÙóìáÅéÇ ËÅÑ¡µèÍ仨Ðä´éäÁèµéͧà¢éÒä» Do Loop ÍÕ¡
blnFlag = True
End If
' ËÒ¤èҨӹǹËÅÑ¡·ÕèàËÅ×Í áÅéÇÊ觤èҤ׹¡ÅѺ¢Í§¿Ñ§¤ìªÑè¹ä»ä´éàÅÂ
RandomNumber = RandomNumber & Int((9 - 0 + 1) * Rnd) + 0
Next
End Function
Private Sub Form_Load()
' »éͧ¡Ñ¹¡ÒÃàÃÕ¡â»Ãá¡ÃÁ«éÓ
If App.PrevInstance Then End
' µÑé§¿ÍÃìÁÍÂÙè¡Öè§¡ÅÒ§¨ÍÀÒ¾
Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
Call SetupScreen
End Sub
|