I have created simple VIES VAT number validation script. Script allows to upload previously prepared CSV with countryCode and vatNumber and creates HTML table with validation results.
CSV example:
countryCode;vatNumber AT;U20557305 AT;U55343505 AT;U63017835 AT;U63091969 AT;U67414700 AT;U68575437 AT;U73556289 BE;0502674883 BG;106030859 BG;115100705
PHP script:
<!-- Author: Karlis Rozenbergs Blog: drinkits.optimisti.lv Based on http://stackoverflow.com/a/29955950 --> <html> <head> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"></script> <style> html, body { width: 100%; } /* Tables */ table { position: relative; //display: block; margin: 10px auto; padding: 0; width: 100%; height: auto; border-collapse: collapse; text-align: center; } table thead tr { background-color: green; font-weight: bold; } table tr { margin: 0; padding: 0; border: 0; border: 1px solid #999; width: 100%; } table tr td { margin: 0; padding: 4px 8px; border: 0; border: 1px solid #999; } </style> <script type="text/javascript"> $(document).ready(function(){ $('#tableID td').each(function(){ if ($(this).text() == 'false') { $(this).css('background-color','red'); } }); }); </script> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <button type="submit" name="import">Import</button> </form> <?php DEFINE('VIES_URL', 'http://ec.europa.eu/taxation_customs/vies/services/checkVatService'); /** * VIES VAT number validation * Based on http://stackoverflow.com/a/29955950 * * @author Eugen Mihailescu * * @param string $countryCode * @param string $vatNumber * @param int $timeout */ function viesCheckVAT($countryCode, $vatNumber, $timeout = 30) { $response = array(); $pattern = '/<(%s).*?>([\s\S]*)<\/\1/'; $keys = array('countryCode', 'vatNumber', 'requestDate', 'valid', 'name', 'address'); $content = "<s11:Envelope xmlns:s11='http://schemas.xmlsoap.org/soap/envelope/'> <s11:Body> <tns1:checkVat xmlns:tns1='urn:ec.europa.eu:taxud:vies:services:checkVat:types'> <tns1:countryCode>%s</tns1:countryCode> <tns1:vatNumber>%s</tns1:vatNumber> </tns1:checkVat> </s11:Body> </s11:Envelope>"; $opts = array('http' => array('method' => 'POST', 'header' => "Content-Type: text/xml; charset=utf-8; SOAPAction: checkVatService", 'content' => sprintf($content, $countryCode, $vatNumber), 'timeout' => $timeout)); $ctx = stream_context_create($opts); $result = file_get_contents(VIES_URL, false, $ctx); if (preg_match(sprintf($pattern, 'checkVatResponse'), $result, $matches)) { foreach ($keys as $key) preg_match(sprintf($pattern, $key), $matches[2], $value) && $response[$key] = $value[2]; } return $response; } if (isset($_POST['import'])) { if ((isset($_FILES['file']) && is_array($_FILES['file']))) { $csv = $_FILES['file']; if (isset($csv['tmp_name']) && !empty($csv['tmp_name'])) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $csv['tmp_name']); finfo_close($finfo); $allowed_mime = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain'); if (in_array($mime, $allowed_mime) && is_uploaded_file($csv['tmp_name'])) { $f = fopen($csv['tmp_name'], 'r'); fgetcsv($f); $data = array(); while (!feof($f)) { $data[] = fgetcsv($f, null, ';'); } foreach ($data as $array) { $dati[] = viesCheckVAT($array[0], $array[1]); } if (count($dati) > 0): $it = 0; ?> <table id="tableID"> <thead> <tr> <th>ID</th> <th><?php echo implode('</th><th>', array_keys(current($dati))); ?></th> </tr> </thead> <tbody> <?php foreach ($dati as $row): array_map('htmlentities', $row); ?> <tr> <td><?php $it++; echo $it; ?></td> <td><?php echo implode('</td><td>', $row); ?></td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; fclose($f); die; } } } } ?> </body> </html>
Labs, paldies!