Boa noite!
Gostaria de saber dos amigos, se alguém tem uma função ou rotina em Harbour / Minigui Extend para validação de cartões de credito.
Desde já agradeço a atenção dos amigos.
Abraços,
Paulo - Jacareí/SP
Função para verificar o número do cartão de credito
Moderador: Moderadores
-
luiz antonio da silva
- Usuário Nível 3

- Mensagens: 161
- Registrado em: 21 Nov 2006 22:12
- Localização: serrana-sp
Função para verificar o número do cartão de credito
Boa Noite !
aqui tem os algoritmos.
http://www.devmedia.com.br/validando-ca ... -cnpj/1923
abraço.
Luiz.
aqui tem os algoritmos.
http://www.devmedia.com.br/validando-ca ... -cnpj/1923
abraço.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
- JoséQuintas
- Administrador

- Mensagens: 20415
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
Função para verificar o número do cartão de credito
Nesse link o cara não explica direito nem uma coisa e nem outra.
Este melhor:
https://en.wikipedia.org/wiki/Luhn_algorithm
Tive que fazer um passo a passo. O default é o mesmo número descrito no exemplo.
Este melhor:
https://en.wikipedia.org/wiki/Luhn_algorithm
Tive que fazer um passo a passo. O default é o mesmo número descrito no exemplo.
Código: Selecionar todos
#include "inkey.ch"
PROCEDURE Main
LOCAL mNumero := Pad( "79927398713", 20 ), GetList := {}
SetMode( 25, 80 )
CLS
DO WHILE .T.
@ 3, 0 SAY "Cartao:" GET mNumero PICTURE "@K!"
READ
IF LastKey() == K_ESC
EXIT
ENDIF
Scroll( 4, 0, MaxRow(), MaxCol(), 0 )
ValidaCartao( mNumero )
ENDDO
RETURN
FUNCTION ValidaCartao( mNumero )
LOCAL nCont, mSoma := 0, mMultiplica := 2, lReturn, mSingleNumber, mResultado, mAdiciona
FOR nCont = Len( Trim( mNumero ) ) - 1 TO 1 STEP -1
mSingleNumber := Val( Substr( mNumero, nCont, 1 ) )
mResultado := mSingleNumber * mMultiplica
mAdiciona := Val( Right( Str( mResultado, 2 ), 1 ) )
IF mResultado > 9
mAdiciona += Val( Left( Str( mResultado, 2 ), 1 ) )
ENDIF
mSoma += mAdiciona
? Str( mSingleNumber, 5 ), Str( mMultiplica, 5 ), Str( mResultado, 5 ), Str( mAdiciona, 5 ), Str( mSoma, 5 )
mMultiplica := iif( mMultiplica == 2, 1, 2 )
NEXT
mSoma := Mod( mSoma, 10 )
? Str( mSoma, 2 )
mSoma := iif( mSoma == 0, 0, 10 - mSoma )
? Str( mSoma, 2 )
lReturn := Str( mSoma, 1 ) == Substr( mNumero, Len( Trim( mNumero ) ), 1 )
IF .NOT. lReturn
? "Inválido"
ELSE
? "OK "
ENDIF
RETURN .T.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Nascimento
- Usuário Nível 4

- Mensagens: 765
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
Função para verificar o número do cartão de credito
Muito bom não sabia que tinha cod validador
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui