ValidateCard , , IBM 1960 . , . . , , . , , .
Web- http://en.wikipedia.org/wiki/Luhn_algorithm. "Reader's Digest".
1. , . 2 . , 1111 2121.
2. 9, . , 1166 2136. 6 ( 12) (1 2) ( 3).
3. . 2136, 2+1+3+6 ( 12).
4. 0 ( , 10), . .
, . , . , , ( , ).
ValidateCard. , ( ):
1 Function ValidateCard(CardNumber As String)
' ( )
2 Dim SumOfDigits
3 SumOfDigits = 0
' , ,
' .
' (1)
4 Dim OddNumbered
5 OddNumbered = True
2 , . .
6 Dim i
7 For i = Len(CardNumber) To 1 Step -1
8 Dim CurrentNumber
9 CurrentNumber = Mid(CardNumber, i, 1)
10 If OddNumbered = False Then
'
11 CurrentNumber = CurrentNumber * 2
12 If CurrentNumber >= 10 Then '
' , .
' ,
'
13 Dim NumText As String
14 NumText = CurrentNumber
15 CurrentNumber = Val(Left(NumText, 1)) +
16 Val(Right(NumText, 1))
17 End If
18 End If
'
19 " SumOfDigits = SumOfDigits + CurrentNumber
.
' True False
|
|
' False True
20 OddNumbered = Not OddNumbered
21 Next
' 10,
22 If SumOfDigits Mod 10 = 0 Then
23 ValidateCard = True
24 Else
25 ValidateCard = False
26 End If
27 End Function
.
■ 1 . , . As String. , , .
■ 23 , .
■ 45 , , , , .
■ 67 For/Next. , Step -1. , 1 ( 1 ). .
Len, . , 11 , 11 ( ).
■ 89 , . Mid .
■ 10 , , .
■ 1117 , , . ( 11). , ( 1315).
■ 19 . , . , .
■ 20 ( ).
■ 21 6 .
■ 2226 . 10, . Mod, ( 10, , .)
, , , VB, , . , .
, ValidateCard, .
, , CardNumber:
Private Sub CardNumber_BeforeUpdate(Cancel As Integer)
If ValidateCard(CardNuraber) Then
MsgBox "Your card is valid," Else.
|
|
MsgBox "Your card is invalid. " & _
"Did you forget a number, or are you trying to cheat us?" Cancel = True
End If
End Sub
CardNumber, . 17.3.
. 17.3. Validate Card AddCreditCard ( ) Boutique Fudge. CardNumber, ,