<?php
class IBAN{
	public static $ibanlar = [
		'AA' => [12, '^[A-Z0-9]{12}$'],
		'AD' => [20, '^[0-9]{4}[0-9]{4}[A-Z0-9]{12}$'],
		'AE' => [19, '^[0-9]{3}[0-9]{16}$'],
		'AL' => [24, '^[0-9]{8}[A-Z0-9]{16}$'],
		'AO' => [21, '^[0-9]{21}$'],
		'AT' => [16, '^[0-9]{5}[0-9]{11}$'],
		'AX' => [14, '^[0-9]{6}[0-9]{7}[0-9]{1}$'],
		'AZ' => [24, '^[A-Z]{4}[A-Z0-9]{20}$'],
		'BA' => [16, '^[0-9]{3}[0-9]{3}[0-9]{8}[0-9]{2}$'],
		'BE' => [12, '^[0-9]{3}[0-9]{7}[0-9]{2}$'],
		'BF' => [23, '^[0-9]{23}$'],
		'BG' => [18, '^[A-Z]{4}[0-9]{4}[0-9]{2}[A-Z0-9]{8}$'],
		'BH' => [18, '^[A-Z]{4}[A-Z0-9]{14}$'],
		'BI' => [12, '^[0-9]{12}$'],
		'BJ' => [24, '^[A-Z]{1}[0-9]{23}$'],
		'BL' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'BR' => [25, '^[0-9]{8}[0-9]{5}[0-9]{10}[A-Z]{1}[A-Z0-9]{1}$'],
		'CH' => [17, '^[0-9]{5}[A-Z0-9]{12}$'],
		'CI' => [24, '^[A-Z]{1}[0-9]{23}$'],
		'CM' => [23, '^[0-9]{23}$'],
		'CR' => [17, '^[0-9]{4}[0-9]{13}$'],
		'CV' => [21, '^[0-9]{21}$'],
		'CY' => [24, '^[0-9]{3}[0-9]{5}[A-Z0-9]{16}$'],
		'CZ' => [20, '^[0-9]{4}[0-9]{6}[0-9]{10}$'],
		'DE' => [18, '^[0-9]{8}[0-9]{10}$'],
		'DK' => [14, '^[0-9]{4}[0-9]{9}[0-9]{1}$'],
		'DO' => [24, '^[A-Z0-9]{4}[0-9]{20}$'],
		'DZ' => [20, '^[0-9]{20}$'],
		'EE' => [16, '^[0-9]{2}[0-9]{2}[0-9]{11}[0-9]{1}$'],
		'ES' => [20, '^[0-9]{4}[0-9]{4}[0-9]{1}[0-9]{1}[0-9]{10}$'],
		'FI' => [14, '^[0-9]{6}[0-9]{7}[0-9]{1}$'],
		'FO' => [14, '^[0-9]{4}[0-9]{9}[0-9]{1}$'],
		'FR' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'GB' => [18, '^[A-Z]{4}[0-9]{6}[0-9]{8}$'],
		'GE' => [18, '^[A-Z]{2}[0-9]{16}$'],
		'GF' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'GI' => [19, '^[A-Z]{4}[A-Z0-9]{15}$'],
		'GL' => [14, '^[0-9]{4}[0-9]{9}[0-9]{1}$'],
		'GP' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'GR' => [23, '^[0-9]{3}[0-9]{4}[A-Z0-9]{16}$'],
		'GT' => [24, '^[A-Z0-9]{4}[A-Z0-9]{20}$'],
		'HR' => [17, '^[0-9]{7}[0-9]{10}$'],
		'HU' => [24, '^[0-9]{3}[0-9]{4}[0-9]{1}[0-9]{15}[0-9]{1}$'],
		'IE' => [18, '^[A-Z]{4}[0-9]{6}[0-9]{8}$'],
		'IL' => [19, '^[0-9]{3}[0-9]{3}[0-9]{13}$'],
		'IR' => [22, '^[0-9]{22}$'],
		'IS' => [22, '^[0-9]{4}[0-9]{2}[0-9]{6}[0-9]{10}$'],
		'IT' => [23, '^[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}$'],
		'JO' => [26, '^[A-Z]{4}[0-9]{4}[A-Z0-9]{18}$'],
		'KW' => [26, '^[A-Z]{4}[A-Z0-9]{22}$'],
		'KZ' => [16, '^[0-9]{3}[A-Z0-9]{13}$'],
		'LB' => [24, '^[0-9]{4}[A-Z0-9]{20}$'],
		'LC' => [28, '^[A-Z]{4}[A-Z0-9]{24}$'],
		'LI' => [17, '^[0-9]{5}[A-Z0-9]{12}$'],
		'LT' => [16, '^[0-9]{5}[0-9]{11}$'],
		'LU' => [16, '^[0-9]{3}[A-Z0-9]{13}$'],
		'LV' => [17, '^[A-Z]{4}[A-Z0-9]{13}$'],
		'MC' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'MD' => [20, '^[A-Z0-9]{2}[A-Z0-9]{18}$'],
		'ME' => [18, '^[0-9]{3}[0-9]{13}[0-9]{2}$'],
		'MF' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'MG' => [23, '^[0-9]{23}$'],
		'MK' => [15, '^[0-9]{3}[A-Z0-9]{10}[0-9]{2}$'],
		'ML' => [24, '^[A-Z]{1}[0-9]{23}$'],
		'MQ' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'MR' => [23, '^[0-9]{5}[0-9]{5}[0-9]{11}[0-9]{2}$'],
		'MT' => [27, '^[A-Z]{4}[0-9]{5}[A-Z0-9]{18}$'],
		'MU' => [26, '^[A-Z]{4}[0-9]{2}[0-9]{2}[0-9]{12}[0-9]{3}[A-Z]{3}$'],
		'MZ' => [21, '^[0-9]{21}$'],
		'NC' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'NL' => [14, '^[A-Z]{4}[0-9]{10}$'],
		'NO' => [11, '^[0-9]{4}[0-9]{6}[0-9]{1}$'],
		'PF' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'PK' => [20, '^[A-Z]{4}[A-Z0-9]{16}$'],
		'PL' => [24, '^[0-9]{8}[0-9]{16}$'],
		'PM' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'PS' => [25, '^[A-Z]{4}[A-Z0-9]{21}$'],
		'PT' => [21, '^[0-9]{4}[0-9]{4}[0-9]{11}[0-9]{2}$'],
		'QA' => [25, '^[A-Z]{4}[0-9]{4}[A-Z0-9]{17}$'],
		'RE' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'RO' => [20, '^[A-Z]{4}[A-Z0-9]{16}$'],
		'RS' => [18, '^[0-9]{3}[0-9]{13}[0-9]{2}$'],
		'SA' => [20, '^[0-9]{2}[A-Z0-9]{18}$'],
		'SC' => [27, '^[A-Z]{4}[0-9]{4}[0-9]{16}[A-Z]{3}$'],
		'SE' => [20, '^[0-9]{3}[0-9]{16}[0-9]{1}$'],
		'SI' => [15, '^[0-9]{5}[0-9]{8}[0-9]{2}$'],
		'SK' => [20, '^[0-9]{4}[0-9]{6}[0-9]{10}$'],
		'SM' => [23, '^[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}$'],
		'SN' => [24, '^[A-Z]{1}[0-9]{23}$'],
		'ST' => [21, '^[0-9]{8}[0-9]{11}[0-9]{2}$'],
		'TF' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'TL' => [19, '^[0-9]{3}[0-9]{14}[0-9]{2}$'],
		'TN' => [20, '^[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}$'],
		'TR' => [22, '^[0-9]{5}[0-9]{1}[A-Z0-9]{16}$'],
		'UA' => [25, '^[0-9]{6}[A-Z0-9]{19}$'],
		'VG' => [20, '^[A-Z]{4}[0-9]{16}$'],
		'WF' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$'],
		'XK' => [16, '^[0-9]{4}[0-9]{10}[0-9]{2}$'],
		'YT' => [23, '^[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}$']
	];
	private $iban;
	public function dogrula($iban){
		$this->iban = preg_replace('/[^a-z0-9]+/i', '', trim(strtoupper($iban)));
		if(!isset(static::$ibanlar[substr($this->iban,0,2)])){
				$hata = 'IBAN ülke kodu geçerli değil veya desteklenmiyor';
		}elseif (strlen($this->iban) !== 4+static::$ibanlar[substr($this->iban,0,2)][0]){
				$hata = 'IBAN uzunluğu geçersiz';
		}elseif(preg_match('/'.static::$ibanlar[substr($this->iban,0,2)][1].'/',substr($this->iban,4)) !== 1){
				$hata = 'IBAN biçimi geçersiz';
		}elseif(!($this->bcmod((substr($this->iban,4).$this->kodno(substr($this->iban,0,2)).substr($this->iban,2,2)),97)==='1')) {
				$hata = 'IBAN sağlama toplamı geçersiz';
		} else {
				$hata = '';
		}
		if($hata == ""){
			return "Geçerli";
		}else{
			return $hata;
		}
	}
	public function duzelt(){
		return sprintf(
				'%s %s %s',
				substr($this->iban,0,2) . substr($this->iban,2,2),
				substr(substr($this->iban,4,4), 0, 4),
				implode(' ', str_split(substr($this->iban,8, static::$ibanlar[substr($this->iban,0,2)][0] -4), 4))
		);
	}
	private function kodno($lR){
		$nR = '';
		foreach (str_split($lR) as $char) {
				$ord = ord($char);
				if ($ord >= 65 && $ord <= 90) {
						$nR .= (string) ($ord - 55);
				} elseif ($ord >= 48 && $ord <= 57) {
						$nR .= (string) ($ord - 48);
				}
		}
		return $nR;
	}
	private function bcmod($x, $y){
		if (!function_exists('bcmod')) {
			$al = 5;
			$mod = '';
			do {
				$a = (int)$mod . substr($x, 0, $al);
				$x = substr($x, $al);
				$mod = $a % $y;
			} while (strlen($x));
			return (string)$mod;
		} else {
			return bcmod($x, $y);
		}
	}
}
$i=new IBAN;
echo $i->dogrula("TR320006701000000048830001")."<br>";
echo $i->duzelt()."<br>";
?>
Çıktısı
Geçerli
TR32 0006 7010 0000 0048 8300 01