Видимо нейронные связи уже не те, поэтому прошу содействия знатоков)
Дано: неполный номер банковской карты формата 1234 56ХХ ХХХХ 7890 Требуется выдать все возможные варианты написания. Сколько их будет всего?
И конечно с использованием алгоритма Луна, чтобы варианты были реальными. То есть в идеале видится ексель файл, куда забиваются имеющиеся числа, а файл выдает все возможные варианты. по ощущениям вариантов около тысячи
Sub bank_card()
i = 1
Application.ScreenUpdating = False
For f = 0 To 9
For e = 0 To 9
For d = 0 To 9
For c = 0 To 9
For b = 0 To 9
For a = 0 To 9
Cells(i, 1).Value = "1234 56" & a & b & " " & c & d & e & f & " 7890"
i = i + 1
Next a
Next b
Next c
Next d
Next e
Next f
Application.ScreenUpdating = True
End Sub
Sub bank_card()
i = 1
Application.ScreenUpdating = False
For f = 0 To 9
For e = 0 To 9
For d = 0 To 9
For c = 0 To 9
For b = 0 To 9
For a = 0 To 9
chislo = "481776" & a & b & c & d & e & f & "2826"
If ValidateLuhn(chislo) = True Then
Cells(i, 1).Value = chislo
i = i + 1
End If
Next a
Next b
Next c
Next d
Next e
Next f
Application.ScreenUpdating = True
End Sub
Function ValidateLuhn(ByVal oCell As String) As Boolean
Dim i As Long, j As Long, k As Long, StrTmp As String
ValidateLuhn = False
StrTmp = Replace(Replace(oCell, " ", ""), "-", "")
If IsNumeric(StrTmp) Then
Select Case Len(StrTmp)
Case 14: If Left(StrTmp, 1) <> 3 Then Exit Function
Case 15 'Amex
If Left(StrTmp, 1) <> 3 Then Exit Function
StrTmp = "0" & StrTmp
Case 16
If (Left(StrTmp, 1) < 4) Or (Left(StrTmp, 1) > 6) Then Exit Function
Case Else: Exit Function
End Select
For i = 1 To Len(StrTmp)
j = Mid(StrTmp, i, 1) * (i Mod 2 + 1)
k = k + Int(j / 10) + j Mod 10
Next
If k Mod 10 = 0 Then ValidateLuhn = True
End If
End Function
Т.к. я не знаю ничего про этого Луну, не могу ничего сказать про корректность результатов (нашел в интернете функцию). На Вашем примере валидных карт получилось ноль. На примере 4817 76ХХ ХХХХ 2826 - 100 000 карт.