Проверка ОГРН и ОГРНИП на PHP

3 года назад выкладывал тут проверку ОГРН на JS, вот теперь понадобилась такая же на PHP. Так что выложу и её.

Но в случае с PHP стоит учитывать один нюанс: проверка будет работать корректно только если будет запущена на 64х-разрядной версии PHP. Почему эта же проверка на JS работает в 32х-разрядных браузерах я сказать не берусь. Не иначе как магия.

Собственно код:

function checkOGRN($ogrn){
	if(!is_numeric($ogrn)){
		echo 'ОГРН должен состоять из цифр';
		return false;
	}

	if($ogrn > PHP_INT_MAX){
		echo 'Проверка невозможна, т.к. скрипт запущен 
на 32х-разрядной версии PHP';
		return false;
	}

	//делаем строкой
	$ogrn = $ogrn.'';

	if(strlen($ogrn) == 13 and $ogrn[12] != substr((substr($ogrn, 0, -1)%11), -1)
){
		echo 'Контрольное число равно '.substr((substr($ogrn,
 0, -1)%11), -1).'. Ожидалось '.$ogrn[12];
		return false;
	}elseif(strlen($ogrn) == 15 and $ogrn[14] != substr(substr($ogrn, 0, -1)%13,
 -1)){
		echo 'Контрольное число равно '.substr(substr($ogrn,
 0, -1)%13, -1).'. Ожидалось '.$ogrn[14];
		return false;
	}elseif(strlen($ogrn) != 13 and strlen($ogrn) != 15){
		echo 'ОГРН должен состоять из 13 или 15 цифр';
		return false;
	}

	return true;
}

P.S. выкладываю для ленивых. Вдруг кто хочет что-то готовое и не хочет разбираться.

Один комментарий

32бит

// Проверка ОГРН для 32-х битного PHP
function checkOGRN($ogrn){
if(!preg_match(«[0-9]»,$ogrn)){
echo ‘ОГРН должен состоять из цифр’;
return false;
}

$ogrn = $ogrn.»;

if(strlen($ogrn) == 13 and $ogrn[12] != $ost= substr(bcsub(substr($ogrn, 0, -1),bcmul(bcdiv(substr($ogrn, 0, -1),’11’),’11’)),-1))
{
echo ‘Контрольное число равно ‘.substr((substr($ogrn,
0, -1)%11), -1).’. Ожидалось ‘.$ogrn[12];
return false;
}
elseif(strlen($ogrn) == 15 and $ogrn[14] != substr(bcsub(substr($ogrn, 0, -1),bcmul(bcdiv(substr($ogrn, 0, -1),’13’),’13’)),-1))
{
echo ‘Контрольное число равно ‘.substr(substr($ogrn,
0, -1)%13, -1).’. Ожидалось ‘.$ogrn[14];
return false;
}elseif(strlen($ogrn) != 13 and strlen($ogrn) != 15){
echo ‘ОГРН должен состоять из 13 или 15 цифр’;
return false;
}

return true;
}

Ответить

Ваш отзыв

logo