SORU
6 EKİM 2008, PAZARTESİ


PHP kredi kartı doğrulamak için en iyi yolu nedir?

Kredi kartı numaranızı ve ek bir bilgi, ne ya da geçerli bir sayı olup olmadığını belirlemek için PHP en iyi yolu nedir?

Şu anda American Express, Discover, MasterCard ve Visa ile çalışacak bir şey istiyorum, ama aynı zamanda diğer türleri ile çalışmak yararlı olabilir.

CEVAP
6 EKİM 2008, PAZARTESİ


Kart numarası doğrulama için üç bölüm vardır:

  1. DESEN- maç yapar bir desen sağlayıcıları (örneğin VİSA/Mastercard/etc.)
  2. SAĞLAMA toplamı- yok aslında check-sum (örneğin "34" AMEX kart numarası yapmak için) . sonra sadece 13 rasgele sayılar
  3. GERÇEKTEN VAR- aslında var mı ilgili bir hesap (bir tüccar hesabı olmadan bu almak için olası değildir)

Desen

  • MASTERCARD=16 boy=51-55, () Mod10 checksummed Önek
  • VİZE=4, Uzunluğu=13 veya 16 (Mod10) Önek
  • AMEX=34 veya 37,=15 (Mod10) Uzunluğu Önek
  • =300-305, 36 ya da 38, Uzunluğu=14 (Mod10) Carte Önek . Diners Club/
  • Discover=16, (Mod10)=6011,622126-622925,644-649,65 Uzunluğu Önek
  • vb. (detailed list of prefixes)

Sağlama toplamı

En kartları sağlaması için Luhn algoritması kullanın:

Luhn Algorithm described on Wikipedia

Wikipedia link, PHP dahil olmak üzere birçok uygulamaları için bağlantılar vardır:

<?
/* Luhn algorithm number checker - (c) 2005-2008 shaman - www.planzero.org *
 * This code has been released into the public domain, however please      *
 * give credit to the original author where possible.                      */

function luhn_check($number) {

  // Strip any non-digits (useful for credit card numbers with spaces and hyphens)
  $number=preg_replace('/\D/', '', $number);

  // Set the string length and parity
  $number_length=strlen($number);
  $parity=$number_length % 2;

  // Loop through each digit and do the maths
  $total=0;
  for ($i=0; $i<$number_length; $i  ) {
    $digit=$number[$i];
    // Multiply alternate digits by two
    if ($i % 2 == $parity) {
      $digit*=2;
      // If the sum is two digits, add them together (in effect)
      if ($digit > 9) {
        $digit-=9;
      }
    }
    // Total up the digits
    $total =$digit;
  }

  // If the total mod 10 equals 0, the number is valid
  return ($total % 10 == 0) ? TRUE : FALSE;

}
?>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ABC News (Australia)

    ABC News (Au

    9 HAZİRAN 2008
  • Michael Zhang

    Michael Zhan

    8 EYLÜL 2012
  • Stanislav Petrov

    Stanislav Pe

    7 ŞUBAT 2009