Nas matérias anteriores iniciamos um assunto em carrinho de compras e hoje temos muitos pedidos solicitando para falarmos sobre tais assuntos.
Após focarmos no pagamento através do Paypal, estudamos um assunto fundamental que é o “cartões de crédito”.
Como encontramos muitas empresas ganhando dinheiro com este tipo de script, não vamos fornecê-lo por completo (como fazemos com vários sistemas), mas vamos focar este assunto detalhadamente em várias matérias, para que Programadores iniciantes e experientes possam elaborar este tipo de sistema.
Abaixo vamos descrever uma rotina para checar os números do cartão de crédito e em anexo você poderá pegar o script para analisar.

Rotina Para Checar Os Números Do Cartão De Crédito
Quem desenvolve sistemas para receber pagamentos através de cartões de créditos, precisa elaborar várias rotinas para concluir o recebimento dos valores com êxito.
Alguns dos procedimentos são:
- O Internauta preenche o formulário (com validações para ele não esquecer nenhum campo)
- Verificar se o número foi repassado corretamente pelo formulário
- Verificar se a quantidade de caracteres são adequadas para um cartão de crédito
- Verifica se os números estão corretos
- Dá andamento a procedimento de cobrança.
Até para facilitar, vamos definir passo a passo como funciona esta parte do código!
O trecho abaixo valida por array cada tipo de cartão de crédito e informa se ele é um tipo de cartão válido.
 function checkCreditCard ($cardnumber, $cardname, &$errornumber, &$errortext) {
  $cards = array (  array ('name' => 'American Express',
                          'length' => '15',
                          'prefixes' => '34,37',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Diners Club Carte Blanche',
                          'length' => '14',
                          'prefixes' => '300,301,302,303,304,305',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Diners Club',
                          'length' => '14,16',
                          'prefixes' => '305,36,38,54,55',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Discover',
                          'length' => '16',
                          'prefixes' => '6011,622,64,65',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Diners Club Enroute',
                          'length' => '15',
                          'prefixes' => '2014,2149',
                          'checkdigit' => true
                         ),
                   array ('name' => 'JCB',
                          'length' => '16',
                          'prefixes' => '35',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Maestro',
                          'length' => '12,13,14,15,16,18,19',
                          'prefixes' => '5018,5020,5038,6304,6759,6761',
                          'checkdigit' => true
                         ),
                   array ('name' => 'MasterCard',
                          'length' => '16',
                          'prefixes' => '51,52,53,54,55',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Solo',
                          'length' => '16,18,19',
                          'prefixes' => '6334,6767',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Switch',
                          'length' => '16,18,19',
                          'prefixes' => '4903,4905,4911,4936,564182,633110,6333,6759',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Visa',
                          'length' => '13,16',
                          'prefixes' => '4',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Visa Electron',
                          'length' => '16',
                          'prefixes' => '417500,4917,4913,4508,4844',
                          'checkdigit' => true
                         ),
                   array ('name' => 'LaserCard',
                          'length' => '16,17,18,19',
                          'prefixes' => '6304,6706,6771,6709',
                          'checkdigit' => true
                         )
                );
O trecho abaixo definirá se o cartão digitado é inválido, desconhecido, etc.
  $ccErrorNo = 0;
  $ccErrors [0] = "Unknown card type";
  $ccErrors [1] = "No card number provided";
  $ccErrors [2] = "Credit card number has invalid format";
  $ccErrors [3] = "Credit card number is invalid";
  $ccErrors [4] = "Credit card number is wrong length";
               
Sabendo que tipo de cartão estamos trabalhando, vamos dar andamento no script!
O trecho abaixo verificará se o tipo de cartão é válido.
  $cardType = -1;
  for ($i=0; $i
Se o tipo de cartão não funcionar, reporta um erro.
  if ($cardType == -1) {
     $errornumber = 0;
     $errortext = $ccErrors [$errornumber];
     return false;
  }
  if (strlen($cardnumber) == 0)  {
     $errornumber = 1;
     $errortext = $ccErrors [$errornumber];
     return false;
  }
O trecho abaixo deverá retirar espaços em branco do cartão de crédito.
$cardNo = str_replace (' ', '', $cardnumber);
O trecho abaixo verifica se o conteúdo digitado é numérico e se está correto.
  if (!eregi('^[0-9]{13,19}$',$cardNo))  {
     $errornumber = 2;
     $errortext = $ccErrors [$errornumber];
     return false;
  }
O trecho abaixo verifica os módulos digitados (se for solicitado).
  if ($cards[$cardType]['checkdigit']) {
    $checksum = 0;
    $mychar = "";
    $j = 1;                                         
for ($i = strlen($cardNo) - 1; $i >= 0; $i--) {
$calc = $cardNo{$i} * $j;
      if ($calc > 9) {
        $checksum = $checksum + 1;
        $calc = $calc - 10;
      }
$checksum = $checksum + $calc;
      if ($j ==1) {$j = 2;} else {$j = 1;};
    } 
    if ($checksum % 10 != 0) {
     $errornumber = 3;
     $errortext = $ccErrors [$errornumber];
     return false;
    }
  }
O trecho abaixo lê o array e verifica se os prefixos são válidos para este cartão.
  $prefix = split(',',$cards[$cardType]['prefixes']);
  $PrefixValid = false;
  for ($i=0; $i
O trecho abaixo valida o prefixo e aponta para o local correto.
  if (!$PrefixValid) {Cartão de Crédito,
     $errornumber = 3;
     $errortext = $ccErrors [$errornumber];
     return false;
  }
O trecho abaixo verifica se o que foi digitado é válido para cartão.
  $LengthValid = false;
  $lengths = split(',',$cards[$cardType]['length']);Cartão de Crédito,
  for ($j=0; $j
O trecho abaixo verifica se tudo está ok e se o que foi digitado é válido.
  if (!$LengthValid) {
     $errornumber = 4;
     $errortext = $ccErrors [$errornumber];
     return false;
  };
O trecho abaixo informa que o cartão de crédito é válido.
  return true;
Espero que esta matéria lhe ajude em algo ao elaborar seu Projeto.
Não deixe de acompanhar nossas próximas matérias, pois estaremos pouco a pouco falando sobre transações através dos cartões de crédito e as demais formas de pagamento.
Download do código utilizado neste tutorial: Carrinho De Compras - Pagamentos
 
				
One Response
ola gostei do site, tenho uma duvida estou fazendo um projeto com carrinho de compras mas tenho que colocar estoque para o cliente nao comprar mais que esta na loja.
como posso fazer isso. abraços!!!