PDA - personal digital assistant

Visualizza versione completa : Formal European VAT validation



Admin
08/06/2009, 13:26
/**
* check_eu_vat()
*
* Formal European VAT validation.
*
* @param mixed $vat_number
* @return boolean Success
*/
function check_eu_vat($vat_number)
{
// Checks if the vat number contains invalid characters.

// Check for spaces
if(strpos($vat_number, ' ') !== false)
{
return false;
}

// Check for lowercase letters
if(strcmp($vat_number, strtoupper($vat_number)))
{
return false;
}

// Check for invalid characters, and split the VAT number into country and
// VAT ID
if(!ereg('([A-Z]{2})([0-9A-Z]*)', $vat_number, $regs))
{
return false;
}

$country_id = $regs[1];
$vat_id = $regs[2];

$n = strlen($vat_id);
switch($country_id)
{
case 'BE': // België BE
// http://ec.europa.eu/taxation_customs/vies/en/vieshome.htm
// ALL Belgian VAT numbers will change from 9 to 10 digits as from
// 31/12/2007
switch($n)
{
case 9:
case 10:
return true;
}
return false;
case 'BG': // Bulgarije BG
switch($n)
{
case 9:
case 10:
return true;
}
return false;
case 'CY': // Cyprus CY
switch($n)
{
case 9:
return true;
}
return false;
case 'DK': // Denemarken DK
switch($n)
{
case 8:
return true;
}
return false;
case 'DE': // Duitsland DE
switch($n)
{
case 9:
return true;
}
return false;
case 'EE': // Estland EE
switch($n)
{
case 9:
return true;
}
return false;
case 'FI': // Finland FI
switch($n)
{
case 8:
return true;
}
return false;
case 'FR': // Frankrijk FR
switch($n)
{
case 11:
return true;
}
return false;
case 'EL': // Griekenland EL
switch($n)
{
case 9:
return true;
}
return false;
case 'HU': // Hongarije HU
switch($n)
{
case 8:
return true;
}
return false;
case 'IE': // Ierland IE
switch($n)
{
case 8:
return true;
}
return false;
case 'IT': // Italië IT
switch($n)
{
case 11:
return true;
}
return false;
case 'LV': // Letland LV
switch($n)
{
case 11:
return true;
}
return false;
case 'LT': // Litouwen LT
switch($n)
{
case 9:
case 12:
return true;
}
return false;
case 'LU': // Luxemburg LU
switch($n)
{
case 8:
return true;
}
return false;
case 'MT': // Malta MT
switch($n)
{
case 8:
return true;
}
return false;
case 'NL': // Nederland NL
switch($n)
{
case 12:
return true;
}
return false;
case 'AT': // Oostenrijk AT
switch($n)
{
case 9:
return true;
}
return false;
case 'PL': // Polen PL
switch($n)
{
case 10:
return true;
}
return false;
case 'PT': // Portugal PT
switch($n)
{
case 9:
return true;
}
return false;
case 'RO': // Roemenië RO
switch($n)
{
case 10:
return true;
}
return false;
case 'SI': // Slovenië SI
switch($n)
{
case 8:
return true;
}
return false;
case 'SK': // Slowakije SK
switch($n)
{
case 9:
case 10:
return true;
}
return false;
case 'ES': // Spanje ES
switch($n)
{
case 9:
return true;
}
return false;
case 'CZ': // Tsjechië CZ
switch($n)
{
case 8:
case 9:
case 10:
return true;
}
return false;
case 'GB': // Verenigd Koninkrijk GB
switch($n)
{
case 5:
case 9:
case 12:
return true;
}
return false;
case 'SE': // Zweden SE
switch($n)
{
case 12:
return true;
}
return false;
}

// None of those countries
return false;
}