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: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
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, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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: 763
- 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