J'écris une petite application avec des entrées différentes d'un fichier (comme Country Code, numéro de TVA, etc.) et je dois valider que les numéros de TVA sont au format correct. P>
J'ai essayé celui-ci: http://www.codeproject.com/kb/webservices/vatchecker.aspx - Et ça marche .. Mais, et oui, il y a toujours un mais :-), je dois vérifier n'importe où de 100 à 500 numéros de TVA et c'est trop lent pour cela. En plus, je ne suis pas sûr qu'ils m'apprécient de me frapper leur site comme ça. P>
Est-ce que quelqu'un connaît-il une TVA hors ligne, je peux construire dans mon programme C #? p>
6 Réponses :
Si vous regardez Ce site, ils spécifient la structure des numéros de TVA pour chacun des États membres. Peut-être que vous pourriez faire une vérification de vos numéros dans la structure correcte d'abord, ce qui pourrait éviter de faire certaines des demandes. P>
Autre que cela, je pense que vous devrez utiliser ce Webservice pour valider les chiffres. Le service WebService ne correspond pas à une seule base de données, mais se connecte plutôt à la base de données de chaque état pour vérifier le numéro, il n'ya donc aucune base de données unique que vous pourriez télécharger (peut-être que certains États auront des téléchargements de tous les numéros de TVA valides que vous pouvez télécharger, mais je doute et vous devrez vous assurer qu'il est tenu à jour, etc.). P>
Comme Steven suggère cependant dans son commentaire, vous pourriez peut-être accélérer en effectuant plusieurs demandes en même temps. Je n'aurais pas pensé que ce serait un problème, mais vous pourriez toujours envoyer un courriel à l'adresse mentionnée dans Q16 sur cette page et leur demander si cela est correct. P>
Oui, je regardais celui-là. Je devrais probablement faire une fonction pour vérifier chaque numéro de TVA par rapport au format, en fonction du code de pays. Malheureusement, je ne pense pas que vous recherchez des centaines de centaines de numéros de TVA sur leur site Web est la meilleure façon d'y aller. Serait beaucoup plus facile pour moi, mais je suppose que je dois le faire de manière difficile et les vérifier manuellement pour voir si le format est correct :(
@THOMAS: Eh bien, cela dépend de la raison pour laquelle vous faites ce chèque. Si vous allez vendre quelque chose de vatible et que vous ne facturez pas la TVA, car le client vous a donné un numéro de TVA, puis que le numéro de TVA n'était pas valide, je pense que vous pourriez finir de payer la TVA que vous n'avez jamais collectée. Ce cas peut valoir la peine d'utiliser le Webservice pour vérifier aussi attentivement que possible.
C'est vrai. J'ai oublié d'écrire, que les entrées-variables proviennent de notre Navision, de sorte que les chiffres de TVA devraient être valides i>. Le problème est que nous avons assez de "espace réservé" -entré dans nos bases de données Navision, qui sont vides ou n'ont "pas de TVA". Ce sont vraiment les entrées dont j'ai besoin pour vérifier. Notre service de comptabilité vérifie manuellement les numéros de TVA lorsqu'ils créent des clients. Je sais que cela pourrait sembler un peu déroutant, mais je me demandais essentiellement si quelqu'un avait l'impression d'une fonction qui pourrait valider le format des numéros de TVA, selon Q16 sur Vies :)
Dans nos boutiques en ligne, je le fais comme la solution dans l'article du projet de code.
Avant de le soumettre aux services Web, je fais une petite vérification de la santé d'expression régulière pour filtrer "syntaxialement" mauvais identifiants de TVA et donc réduire le nombre d'appels de savon que je dois jouer. p>
C'est un extrait de la table que j'utilise pour stocker les expressions régulières, peut-être que cela vous aide, si vous planifiez quelque chose de similaire: p>
J'ai créé un gist de ces regex, mis à jour avec les corrections par @bigm: Stackoverflow.com/a/36942179/3057236
Ceci est le lien de @ GeoForce GIST.
Vous pouvez essayer ce http://code.google.com/p/vat-validation / Il travaille toujours en cours mais a le code de presque tous les pays de l'UE. P>
if (vatNo.Length == 9) { int calcValue = 0; int index = 0; int checkDigit = Convert.ToInt32(vatNo.Substring(7, 2)); for (int ordinate = 8; ordinate > 1; ordinate--) { calcValue += Convert.ToInt32((vatNo.Substring(index, 1))) * ordinate; index++; } while (calcValue > 0) { calcValue -= 97; } if ((calcValue * -1) != checkDigit) { Error } }
Basé sur la réponse de @uwe Keim (obsolète), j'ai fait la regex »pour 2014 avec ces règles: http://www.bzst.de/de/steeun_international/ust_identifikationsNummer/merkblaetter/aufbau_ust_idnr.html?nn=23440 Quelqu'un peut en avoir besoin. P> p>
Le motif au moins roumain est incorrect. La longueur du nombre pourrait être de 2 à 10 chiffres. Le bon modèle serait ^ ro [1-9] {1,1} [0-9] {1,9} $.
Il n'y avait pas de minimum défini pour la Roumanie où j'ai regardé alors j'ai supposé qu'ils n'utilisaient que tous les chiffres. Je l'ai corrigé, merci pour votre commentaire
Si c'est une option pour vous, vous pouvez utiliser JS-LIB (mon aussi): p>
https://github.com/se-panfilov/jsvat P>
(numéro de TVA de la vérification JSVAT deux fois - avec REGEXP et avec calcul mathématiques) P>
Y a-t-il quelque chose de mal à optimiser le code de travail?
Vous voulez dire le code de vatchecker ou? Selon Vies, leur système est conçu pour des demandes simples et non des demandes de lots.
Pourquoi n'essayez-vous pas de l'exécuter sur plusieurs threads. Cela n'aide pas à ne pas marteler, mais pourrait accélérer votre application d'un facteur 4 à 8.
«Leur site» est un service Web conçu à cette fin, n'est-ce pas? La question est la suivante: ce service fournit-il simplement une sorte de vérification de la somme de contrôle ou valide-t-il réellement le nombre est utilisé? Ce dernier ne peut pas être fait algorithmiquement, un appel de service Web est donc requis.
@Steven: suppose que je pourrais essayer ça. :-) Edit: Bien que, je doute que cela aiderait beaucoup. Le temps de réponse est trop long que je pense. @MNEMOSYN: Oui, il est conçu pour vérifier un numéro de TVA à la fois. Il valide chaque numéro et renvoie l'adresse, etc. Je n'ai pas vraiment besoin de cela - je dois juste vérifier si le format est correct (c.-à-d. DK a 8 caractères, tous numériques)
@THOMAS: Si vous vous souciez que du format, le lien de ma réponse spécifie que pour chaque État membre.