PHP: Алгоритъм за проверка на Единен идентификационен код (ЕИК) на фирма – БУЛСТАТ

Публикувано / posted 2011-12-04 в категория / in category: PHP
  

Покрай суперсекретния ми И публичен мега--мегаломански проект ми трябваше да валидирам ЕИК номера на фирми. Питах чичо Гугъл да ми каже къде мога да намеря PHP реализация, но за моя голяма изненада се оказа, че точно за PHP няма (или поне аз не успях да намеря, но не съм се ровил след 1-ва страница). В най-добрите традиции на синдрома NIH написах един клас за проверка за валидност. Надявам се да е полезен на някой и да му спести време.

Важна забележка: тестван е само с 9-цифрови ЕИК, защото не можах да намеря примери за 13-цифрени, така че ако ще го използвате с такива е необходимо да проверите дали работи ОК с тях.

 


2 Responses to “PHP: Алгоритъм за проверка на Единен идентификационен код (ЕИК) на фирма – БУЛСТАТ”

  1. MilenG says:

    Странно наистина защо няма код в Интернет за булстат? Преди много години (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

  2. Огнян says:

    Доста полезен линк, мерси!

Leave a Reply

Внимание: Моля, въведете само ПЪРВИТЕ ТРИ цифри от картинката
Important: Please enter just the first three digits from the image