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: 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

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

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