<?phperror_reporting(4);if(!defined(PHP_CREDITCARD_CLASS)){define(PHP_CREDITCARD_CLASS, 1);define(UNKNOWN, 0);define(MASTERCARD, 1);define(VISA, 2);define(AMEX, 3);define(DINNERS, 4);define(DISCOVER, 5);define(ENROUTE, 6);define(JCB, 7);define(CC_OK, 0);define(CC_ECALL, 1);define(CC_EARG, 2);define(CC_ETYPE, 3);define(CC_ENUMBER, 4);define(CC_EFORMAT, 5);define(CC_ECANTYPE, 6);class creditcard{var $number;var $type;var $errno;function creditcard(){$this->number = 0;$this->type = UNKNOWN;$this->errno = CC_OK;}function check($cardnum){$this->number = $this->_strtonum($cardnum);if(!$this->detectType($this->number)){$this->errno = CC_ETYPE;return false;}if($this->mod10($this->number)){$this->errno = CC_ENUMBER;return false;}return true;}function detectType($cardnum = 0){if($cardnum)$this->number = $this->_strtonum($cardnum);if(!$this->number){$this->errno = CC_ECALL;return UNKNOWN;}if(preg_match("/^5[1-5]d{14}$/", $this->number))$this->type = MASTERCARD;else if(preg_match("/^4(d{12}|d{15})$/", $this->number))$this->type = VISA;else if(preg_match("/^3[47]d{13}$/", $this->number))$this->type = AMEX;else if(preg_match("/^[300-305]d{11}$/", $this->number) ||preg_match("/^3[68]d{12}$/", $this->number))$this->type = DINNERS;else if(preg_match("/^6011d{12}$/", $this->number))$this->type = DISCOVER;else if(preg_match("/^2(014|149)d{11}$/", $this->number))$this->type = ENROUTE;else if(preg_match("/^3d{15}$/", $this->number) ||preg_match("/^(2131|1800)d{11}$/", $this->number))$this->type = JCB;if(!$this->type){$this->errno = CC_ECANTYPE;return UNKNOWN;}return $this->type;}function detectTypeString($cardnum = 0){if(!$cardnum){if(!$this->type)$this->errno = CC_EARG;}else$this->type = $this->detectType($cardnum);if(!$this->type){$this->errno = CC_ETYPE;return NULL;}switch($this->type){case MASTERCARD:return "MASTERCARD";case VISA:return "VISA";case AMEX:return "AMEX";case DINNERS:return "DINNERS";case DISCOVER:return "DISCOVER";case ENROUTE:return "ENROUTE";case JCB:return "JCB";default:$this->errno = CC_ECANTYPE;return NULL;}}function getCardNumber(){if(!$this->number){$this->errno = CC_ECALL;return 0;}return $this->number;}function errno(){return $this->errno;}function mod10($cardnum){for($sum=0, $i=strlen($cardnum)-1; $i >= 0; $i--){$sum += $cardnum[$i];$doubdigit = "".(2 * $cardnum[--$i]);for($j = strlen($doubdigit)-1; $j >= 0; $j--)$sum += $doubdigit[$j];}return $sum % 10;}function resetCard(){$this->number = 0;$this->type = 0;}function strError(){switch($this->errno){case CC_ECALL:return "Geçersiz Arama";case CC_ETYPE:return "Bilinmeyen Kart Tipi";case CC_ENUMBER:return "Geçersiz Kart Numarası";case CC_EFORMAT:return "Geçersiz Format";case CC_ECANTYPE:return "Kart tipi taranamadı";case CC_OK:return "Başarılı";}}function _strtonum($string){for($i=0; $i< strlen($string); $i++){if(!is_numeric($string[$i]))continue;$nstr = "$nstr".$string[$i];}return $nstr;}}}//ÖRNEK$cc = new creditcard;$card=$_GET[card];if($card){printf("%s nolu kart %s <br>n", $card,(($ccret = $cc->check($card))?" gecerli":"gecersiz"));if($ccret){printf("Kart Tipi: %s veya %d<br>n", $cc->detectTypeString(),$cc->detectType());printf("Kart Numarasi: %s<br>n", $cc->getCardNumber());}elseprintf("%s<br>n", $cc->strError());}?>action="" method=gettype=text name=card size=20type=submit value="Hesapla"