PHP: Алгоритъм за проверка на Единен идентификационен код (ЕИК) на фирма – БУЛСТАТПубликувано / posted 2011-12-04 в категория / in category: PHP
|
Покрай суперсекретния ми И публичен мега--мегаломански проект ми трябваше да валидирам ЕИК номера на фирми. Питах чичо Гугъл да ми каже къде мога да намеря PHP реализация, но за моя голяма изненада се оказа, че точно за PHP няма (или поне аз не успях да намеря, но не съм се ровил след 1-ва страница). В най-добрите традиции на синдрома NIH написах един клас за проверка за валидност. Надявам се да е полезен на някой и да му спести време.
Важна забележка: тестван е само с 9-цифрови ЕИК, защото не можах да намеря примери за 13-цифрени, така че ако ще го използвате с такива е необходимо да проверите дали работи ОК с тях.
|
Странно наистина защо няма код в Интернет за булстат? Преди много години (2003) г. в наше репозитори е влязъл код за проверка на булстат, закойто не съм сигурен дали е писан от наш програмист или той го е намерил от интернет. За всеки случай -- ето кода:
function isBULSTAT ($inBULSTAT)
{
for ($i = 0 ; $i = "0" && $c <= "9") {
$BULSTAT .= $c;
}
}
switch (strlen($BULSTAT)) {
case 9:
for ($i = 0; $i < 8; $i++) {
$c = $c + ( (int) substr($BULSTAT, $i, 1) ) * ($i+1);
}
$c = $c%11;
if ($c == 10) {
$c = 0;
for ($i = 0; $i < 8; $i++) {
$c = $c + ( (int) substr($BULSTAT, $i, 1) ) * ($i+3);
}
$c = ($c%11)%10;
}
return (int)substr($BULSTAT, 8, 1) == $c;
case 13:
$v1 = array (2, 7, 3, 5);
$v2 = array (4, 9, 5, 7);
for ($i = 8; $i < 12; $i++) {
$c = $c + ( (int) substr($BULSTAT, $i, 1) ) * $v1[$i-8] ;
}
$c = $c%11;
if ($c == 10) {
$c = 0;
for ($i = 8; $i < 12; $i++) {
$c = $c + ( (int) substr($BULSTAT, $i, 1) ) * $v2[$i-8];
}
$c = ($c%11)%10;
}
return ((int) substr($BULSTAT, 12, 1) == $c) && isBULSTAT(substr($BULSTAT,0,9)) ;
}
return FALSE;
}
Не знам дали работи, защото напоследък преминахме на друга система. Вместо валидация, правим верификация, защото ни интересуват само фирмите в ЕС (в т.ч. и БГ), които са регистрирани по ДДС. Има един европейски сайт, който дава възможност за SOAP заявки, които връщат информация за даден VAT ID, и ползваме него. Преди това правим само проверка дали номера е с толкова цифри, колкото трябва да са в съответната държава.
Ето веб-услугата: http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
Доста полезен линк, мерси!