Função para verificar o número do cartão de credito

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Paulo_CPV
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 07 Mar 2013 10:27
Localização: Jacarei/SP

Função para verificar o número do cartão de credito

Mensagem por Paulo_CPV »

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
luiz antonio da silva
Usuário Nível 3
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

Mensagem por luiz antonio da silva »

Boa Noite !

aqui tem os algoritmos.

http://www.devmedia.com.br/validando-ca ... -cnpj/1923

abraço.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
Avatar do usuário
JoséQuintas
Administrador
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

Mensagem por JoséQuintas »

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.

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/
Avatar do usuário
Nascimento
Usuário Nível 4
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

Mensagem por Nascimento »

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
Responder