Function at 0x41bfc0
Capabilities:
Validate payment card number using luhn algorithm

Disassembly:
push ebx
push ebp
push esi
mov esi, dword [esp + 0x14]
mov al, byte [esi]
test al, al
push edi
je 0x41c35b
cmp al, 0x25
jne 0x41c341
push 3
add esi, 1
push 0x49aae4
push esi
call fcn.004824da
add esp, 0xc
test eax, eax
jne 0x41c101
movsx eax, byte [esi + 3]
add esi, 3
sub eax, 0x25
add esi, 1
cmp eax, 0x4d
ja case.default.0x41c2e0
movzx eax, byte [eax + 0x41c37c]
jmp dword [eax*4 + 0x41c36c]
mov ecx, dword [esp + 0x1c]
mov al, byte [ecx + 1]
add ecx, 1
test al, al
je 0x41c351
mov edx, dword [esp + 0x14]
nop
add ecx, 1
mov byte [edx], al
mov al, byte [ecx]
add edx, 1
test al, al
jne 0x41c030
mov dword [esp + 0x14], edx
jmp 0x41c351
mov cl, byte [esi]
xor eax, eax
cmp cl, 0x30
jl 0x41c069
cmp cl, 0x39
jg 0x41c069
lea edx, [eax + eax*4]
add esi, 1
movsx eax, cl
mov cl, byte [esi]
cmp cl, 0x30
lea eax, [eax + edx*2 - 0x30]
jge 0x41c050
mov edx, dword [esp + 0x1c]
add edx, 1
test eax, eax
je 0x41c08f
mov edi, dword [esp + 0x14]
mov cl, byte [edx]
test cl, cl
je 0x41c08b
mov byte [edi], cl
add edi, 1
add edx, 1
sub eax, 1
jne 0x41c078
mov dword [esp + 0x14], edi
cmp byte [esi], 0x25
je 0x41c34e
pop edi
pop esi
pop ebp
xor al, al
pop ebx
ret
mov al, byte [esi]
xor edi, edi
cmp al, 0x30
jl 0x41c0be
cmp al, 0x39
jg 0x41c0be
add esi, 1
movsx edx, al
mov al, byte [esi]
cmp al, 0x30
lea ecx, [edi + edi*4]
lea edi, [edx + ecx*2 - 0x30]
jge 0x41c0a7
mov ebx, dword [esp + 0x1c]
lea eax, [ebx + 1]
push eax
call dword [sym.imp.KERNEL32.dll_lstrlenA]
cmp eax, edi
jge 0x41c0d2
mov edi, eax
sub eax, edi
test edi, edi
lea ecx, [eax + ebx + 1]
je 0x41c0f7
mov edx, dword [esp + 0x14]
mov al, byte [ecx]
test al, al
je 0x41c0f3
mov byte [edx], al
add edx, 1
add ecx, 1
sub edi, 1
jne 0x41c0e0
mov dword [esp + 0x14], edx
cmp byte [esi], 0x25
jne case.default.0x41c2e0
jmp 0x41c34e
mov al, byte [esi]
cmp al, 0x70
je 0x41c10b
cmp al, 0x50
jne case.default.0x41c2e0
movsx eax, byte [esi + 1]
add esi, 1
sub eax, 0x31
js case.default.0x41c2e0
cmp eax, 9
jg case.default.0x41c2e0
mov ecx, dword [esp + 0x1c]
mov ebp, dword [ecx + eax*4 + 0x48]
movsx eax, byte [esi + 1]
add esi, 1
sub eax, 0x25
add esi, 1
cmp eax, 0x50
ja case.default.0x41c2e0
movzx edx, byte [eax + 0x41c3dc]
jmp dword [edx*4 + 0x41c3cc]
mov al, byte [esi]
xor ecx, ecx
cmp al, 0x30
jl 0x41c16b
cmp al, 0x39
jg 0x41c16b
add esi, 1
movsx edx, al
mov al, byte [esi]
cmp al, 0x30
lea ecx, [ecx + ecx*4]
lea ecx, [edx + ecx*2 - 0x30]
jge 0x41c154
lea eax, [ecx - 1]
cmp eax, 8
ja case.default.0x41c2e0
jmp dword [eax*4 + 0x41c430]
mov ecx, 0xa
jmp 0x41c1bb
mov ecx, 0x64
jmp 0x41c1bb
mov ecx, 0x3e8
jmp 0x41c1bb
mov ecx, 0x2710
jmp 0x41c1bb
mov ecx, 0x186a0
jmp 0x41c1bb
mov ecx, 0xf4240
jmp 0x41c1bb
mov ecx, 0x989680
jmp 0x41c1bb
mov ecx, 0x5f5e100
jmp 0x41c1bb
mov ecx, 0x3b9aca00
cmp ebp, ecx
jl 0x41c1c6
mov eax, ebp
cdq
idiv ecx
mov ebp, edx
mov eax, 0x66666667
imul ecx
sar edx, 2
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
cmp byte [esi], 0x25
jne case.default.0x41c2e0
add esi, 1
test ecx, ecx
je 0x41c351
jmp 0x41c1f0
mov eax, ebp
cdq
idiv ecx
mov ebx, eax
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add bl, 0x30
add eax, edx
mov ecx, eax
jne 0x41c1f0
mov ecx, dword [esp + 0x14]
mov byte [ecx], bl
jmp 0x41c351
mov al, byte [esi]
xor ecx, ecx
cmp al, 0x30
jl 0x41c239
cmp al, 0x39
jg 0x41c239
add esi, 1
movsx edx, al
mov al, byte [esi]
cmp al, 0x30
lea ecx, [ecx + ecx*4]
lea ecx, [edx + ecx*2 - 0x30]
jge 0x41c222
lea eax, [ecx - 1]
cmp eax, 8
ja case.default.0x41c2e0
jmp dword [eax*4 + 0x41c454]
mov ecx, 0xa
jmp 0x41c289
mov ecx, 0x64
jmp 0x41c289
mov ecx, 0x3e8
jmp 0x41c289
mov ecx, 0x2710
jmp 0x41c289
mov ecx, 0x186a0
jmp 0x41c289
mov ecx, 0xf4240
jmp 0x41c289
mov ecx, 0x989680
jmp 0x41c289
mov ecx, 0x5f5e100
jmp 0x41c289
mov ecx, 0x3b9aca00
cmp ebp, ecx
jl 0x41c1c6
mov eax, 0x66666667
imul ebp
sar edx, 2
mov eax, edx
shr eax, 0x1f
add eax, edx
mov ebp, eax
cmp ebp, ecx
jge 0x41c291
jmp 0x41c1c6
test ebp, ebp
mov ecx, ebp
je 0x41c2cf
xor edi, edi
mov eax, 0x66666667
imul ecx
sar edx, 2
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
add edi, 1
test ecx, ecx
jne 0x41c2b5
jmp 0x41c2d4
mov edi, 1
lea eax, [edi - 1]
cmp eax, 8
ja case.default.0x41c2e0
jmp dword [eax*4 + 0x41c478]
mov ecx, 1
jmp 0x41c1f0
mov ecx, 0xa
jmp 0x41c1f0
mov ecx, 0x64
jmp 0x41c1f0
mov ecx, 0x3e8
jmp 0x41c1f0
mov ecx, 0x2710
jmp 0x41c1f0
mov ecx, 0x186a0
jmp 0x41c1f0
mov ecx, 0xf4240
jmp 0x41c1f0
mov ecx, 0x989680
jmp 0x41c1f0
mov ecx, 0x5f5e100
jmp 0x41c1f0
mov ecx, dword [esp + 0x14]
mov byte [ecx], al
add ecx, 1
mov dword [esp + 0x14], ecx
add esi, 1
mov al, byte [esi]
test al, al
jne 0x41bfd2
mov edx, dword [esp + 0x14]
pop edi
pop esi
pop ebp
mov byte [edx], 0
mov al, 1
pop ebx
ret