begin process at 2012 05 26 06:56:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Modules

 > TESTER NUMÉRO TVA INTRA-COMMUNAUTAIRE

TESTER NUMÉRO TVA INTRA-COMMUNAUTAIRE


 Information sur la source

Note :
7,71 / 10 - par 7 personnes
7,71 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Modules Classé sous :tva, intra, communautaire, tva, validité Niveau :Débutant Date de création :03/02/2006 Date de mise à jour :03/02/2006 15:58:51 Vu :84 581

Auteur : Zlub

Ecrire un message privé
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

Voici une fonction permettant de tester la structure d'un numéro de TVA intra communautaire.

Nous ne pouvons pas aller beaucoup plus loin dans va vérification étant donné qu'il n’existe aucun algorithme accessible aux entreprises permettant de calculer automatiquement les numéros de TVA intracommunautaire et pouvant être intégré dans des systèmes informatiques de gestion.

Les structures testées suivent les conventions du 1er juin 2005 pour les 25 Etats membres

Source

  • ' =====================================================================================================
  • ' isIntraComValide : Teste que la structure du numéro de TVA intra communautaire soit valide.
  • '
  • ' num : numéro de TVA intra Com.
  • ' [siren] : cas pour la France afin d'afiner la vérification
  • '
  • ' Return : True/False
  • '
  • ' =====================================================================================================
  • '
  • ' Il n’existe aucun algorithme accessible aux entreprises permettant
  • ' de calculer automatiquement les numéros de TVA intracommunautaire et
  • ' pouvant être intégré dans des systèmes informatiques de gestion.
  • '
  • ' Mise à jour : 1er juin 2005 pour les 25 Etats membres
  • Private Function isIntraComValide(ByVal num As String, Optional ByVal siren As String) As Boolean
  • 'Nettoyer la chaine
  • num = UCase(Replace(num, " ", ""))
  • If Len(num) < 3 Then ' Il n'existe pas de code de moins de 3 char
  • isIntraComValide = False
  • Exit Function
  • End If
  • ' Découpage des données
  • Dim cle As String: cle = Mid(num, 1, 2)
  • Dim fin As String: fin = Mid(num, 3)
  • Dim finLength As Integer: finLength = Len(fin)
  • ' Vérifier à partir de la clé Pays
  • Select Case cle
  • Case "IE": isIntraComValide = (finLength = 8) ' Irlande
  • Case "DK": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Danemark
  • Case "FI": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Finlande
  • Case "LU": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Luxembourg
  • Case "MT": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Malte
  • Case "SI": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Slovénie
  • Case "HU": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Hongrie
  • Case "CZ": isIntraComValide = (finLength >= 8 And finLength <= 10) And IsNumeric(fin) 'République tchèque
  • Case "ES": isIntraComValide = (finLength = 9) ' Espagne
  • Case "CY": isIntraComValide = (finLength = 9) ' Chypre : CY + 8 caractères numériques + 1 caractères alphabétiques
  • Case "DE": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Allemagne
  • Case "EL": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Grèce
  • Case "GR": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Grèce
  • Case "PT": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Portugal
  • Case "EE": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Estonie
  • Case "SK": isIntraComValide = ((finLength = 9) Or (finLength = 10)) And IsNumeric(fin) ' Slovaquie
  • Case "LT": isIntraComValide = ((finLength = 9) Or (finLength = 12)) And IsNumeric(fin) ' Lituanie
  • Case "GB": isIntraComValide = (((finLength = 9) Or (finLength = 4 And Mid(fin, 1, 1) = "9")) _
  • And IsNumeric(fin)) Or (finLength = 5 And IsNumeric(Mid(fin, 3))) 'Grande-Bretagne
  • Case "AT": isIntraComValide = (finLength = 9 And (Mid(fin, 1, 1) = "U") _
  • And IsNumeric(Mid(fin, 2))) 'Autriche
  • Case "PL": isIntraComValide = (finLength = 10) And IsNumeric(fin) ' Pologne
  • Case "BE": isIntraComValide = (finLength = 10) And IsNumeric(fin) _
  • And (Mid(fin, 1, 1) = "0") ' Belgique
  • Case "LV": isIntraComValide = (finLength = 11) ' Lettonie
  • Case "IT": isIntraComValide = (finLength = 11) And IsNumeric(fin) ' Italie
  • Case "FR": isIntraComValide = (finLength = 11) And IsNumeric(fin) _
  • And IIf(Len(siren), Mid(fin, 3) = siren, True) ' France
  • Case "NL": isIntraComValide = (finLength = 12) ' Pays-Bas
  • Case "SE": isIntraComValide = (finLength = 12) And IsNumeric(fin) ' Suède
  • End Select
  • End Function
' =====================================================================================================
'   isIntraComValide : Teste que la structure du numéro de TVA intra communautaire soit valide.
'
'     num     : numéro de TVA intra Com.
'     [siren] : cas pour la France afin d'afiner la vérification
'
'     Return  : True/False
'
' =====================================================================================================
'
' Il n’existe aucun algorithme accessible aux entreprises permettant
' de calculer automatiquement les numéros de TVA intracommunautaire et
' pouvant être intégré dans des systèmes informatiques de gestion.
'
'  Mise à jour : 1er juin 2005 pour les 25 Etats membres


Private Function isIntraComValide(ByVal num As String, Optional ByVal siren As String) As Boolean

  'Nettoyer la chaine
  num = UCase(Replace(num, " ", ""))

  If Len(num) < 3 Then  ' Il n'existe pas de code de moins de 3 char
    isIntraComValide = False
    Exit Function
  End If

  ' Découpage des données
  Dim cle      As String: cle = Mid(num, 1, 2)
  Dim fin      As String: fin = Mid(num, 3)
  Dim finLength As Integer: finLength = Len(fin)


  ' Vérifier à partir de la clé Pays
  Select Case cle
    Case "IE": isIntraComValide = (finLength = 8)  ' Irlande

    Case "DK": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Danemark
    Case "FI": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Finlande
    Case "LU": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Luxembourg
    Case "MT": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Malte
    Case "SI": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Slovénie
    Case "HU": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Hongrie

    Case "CZ": isIntraComValide = (finLength >= 8 And finLength <= 10) And IsNumeric(fin)  'République tchèque

    Case "ES": isIntraComValide = (finLength = 9)  ' Espagne
    Case "CY": isIntraComValide = (finLength = 9)  ' Chypre : CY + 8 caractères numériques + 1 caractères alphabétiques

    Case "DE": isIntraComValide = (finLength = 9) And IsNumeric(fin)  ' Allemagne
    Case "EL": isIntraComValide = (finLength = 9) And IsNumeric(fin)  ' Grèce
    Case "GR": isIntraComValide = (finLength = 9) And IsNumeric(fin)  ' Grèce
    Case "PT": isIntraComValide = (finLength = 9) And IsNumeric(fin)  ' Portugal
    Case "EE": isIntraComValide = (finLength = 9) And IsNumeric(fin)  ' Estonie

    Case "SK": isIntraComValide = ((finLength = 9) Or (finLength = 10)) And IsNumeric(fin)  ' Slovaquie
    Case "LT": isIntraComValide = ((finLength = 9) Or (finLength = 12)) And IsNumeric(fin)  ' Lituanie

    Case "GB": isIntraComValide = (((finLength = 9) Or (finLength = 4 And Mid(fin, 1, 1) = "9")) _
                                   And IsNumeric(fin)) Or (finLength = 5 And IsNumeric(Mid(fin, 3))) 'Grande-Bretagne

    Case "AT": isIntraComValide = (finLength = 9 And (Mid(fin, 1, 1) = "U") _
                                   And IsNumeric(Mid(fin, 2)))  'Autriche

    Case "PL": isIntraComValide = (finLength = 10) And IsNumeric(fin)  ' Pologne
    Case "BE": isIntraComValide = (finLength = 10) And IsNumeric(fin) _
                                  And (Mid(fin, 1, 1) = "0")  ' Belgique

    Case "LV": isIntraComValide = (finLength = 11)  ' Lettonie
    Case "IT": isIntraComValide = (finLength = 11) And IsNumeric(fin)  ' Italie
    Case "FR": isIntraComValide = (finLength = 11) And IsNumeric(fin) _
                                  And IIf(Len(siren), Mid(fin, 3) = siren, True)  ' France

    Case "NL": isIntraComValide = (finLength = 12)  ' Pays-Bas
    Case "SE": isIntraComValide = (finLength = 12) And IsNumeric(fin)  ' Suède
  End Select
End Function

 Conclusion

Pour la France, il est préférable de passer le siren en parametre afin de completer la vérification.
Pour tout autre pays, il suffit de passer le numéro à tester à la fonction.

Pour consulter une base de données officielle afin de vérifier la concordance entre le nom d’une entreprise et son numéro de TVA intracommunautaire : http://www.europa.eu.int/comm/taxation_customs/vie s/fr/vieshome.htm

++

Zlub


 Historique

03 février 2006 02:55:17 :
fautes de frappes ;)
03 février 2006 15:58:51 :
Affiné pour la Grande-Bretagne

 Sources du même auteur

VB6 - SUPPRIMER LES ACCENTS D'UNE CHAÎNE
VBS - DETECTER, OUVRIR, FERMER LES LECTEURS DE CD
Source avec Zip CONNEXION ADO ACCESS + FONCTIONS OUTILS
TESTER LA VERSION DU MDAC INSTALLÉ
SELECTION D'UN CHAMP D'UNE COMBO SIMPLE À PARTIR D'UNE SAISI...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) CRYPTAGE ET DECRYPTAGE par jerichez
Source avec Zip Source avec une capture Source .NET (Dotnet) EXEMPLE MODBUS POUR MODULES ADAM, BECKHOFF, WAGO par mnmsjaune
Source avec Zip Source .NET (Dotnet) CRÉER SON PROPRE DESIGNER COMME CELUI DE VISUAL STUDIO par ShareVB
Source avec Zip Source .NET (Dotnet) CONVERSION UTM VERS LAT/LONG par BarresLTD
Source avec Zip CPROPGROUP : COLLECTION FAITE MAISON par Flocreate

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture VERIFICATION EXISTENCE D'UNE ADRESSE EMAIL SUR INTERNET par rimas10
Source avec Zip Source avec une capture VÉRIFIER LA CONFORMITÉ D'UNE ADRESSE EMAIL par jack
Source avec Zip Source avec une capture TESTEUR DE LISTE D'URLS V 4.3 par Sechaud
Source avec Zip CALCULETTE QUI AFFICHE LA TVA par davidleduc
TESTER LA VALIDITÉ D'UNE DATE par sev622

Commentaires et avis

Commentaire de katsankat le 03/02/2006 06:47:39

J'aime. Et c'est du bon VB.
Deux remarques:
Il faut affiner le Royaume-Uni.
Ce qui serait intéressant serait un client HTTP qui vérifie en ligne: autant bénéficier de la base de données actualisée en temps réel.

Commentaire de econs le 03/02/2006 14:55:05 administrateur CS

Pour ceux qui voudraient écrire beaucoup moins de lignes de code, il est possible de regrouper les pays qui nécessitent les mêmes actions.


Comme ces actions-ci :


Case "DE": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Allemagne
Case "EL": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Grèce
Case "GR": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Grèce
Case "PT": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Portugal
Case "EE": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Estonie

qui se regroupent comme ceci :

Case "DE","EL","GR","PT","EE": isIntraComValide = (finLength = 9) And IsNumeric(fin)

On peut ainsi enlever dix lignes de ton code.
Chacun fait comme il préfère. Ce n'est en aucun cas une critique de ta source qui est propre et facile à lire.

Commentaire de Zlub le 03/02/2006 15:34:20

Salut,

Merci pour vos commentaires.

KatSankat > en effet, j'ai prévu de m'occuper de ça. En l'état c'est une version "autonome" donc sans connexion au Net. Mais l'idée de vraiment vérifier me plait bien et je vais sans doute bosser dessus.

ECONS > C'est vonlontairement que j'ai fait ainsi en hésitant sur ce point. J'ai opté pour cette solution pour faciliter les modifications au cas où les codes d'un pays changerait. Je me renseigne sur ce point et le cas échéant, je réduirais le nombres de lignes.

++

Zlub

Commentaire de katsankat le 03/02/2006 16:06:50

Salut si tu veux on le fait ensemble car je vais faire le client en C sous linux: la méthode est la même.

Commentaire de econs le 03/02/2006 16:10:00 administrateur CS

Zlub > Y'a pas de problème, tu peux laisser comme c'est là. Y'a pas de faute de programmation.

Je me demandais : le Case "GB" ne serait-il pas de la forme :
isIntraComValide = (Angleterre_valide Or Ecosse_Valide Or Pays_de_Galles_Valide) ?
C'est pour çà que tu l'as appelé GB ?

Commentaire de Zlub le 03/02/2006 16:21:05

ECONS > je suppose que c'est pour ça. Je n'ai pas trouvé le detail dans la doc. Etant donné que ni Ecosse, ni Pays de Galles ont un code pays, j'imagine que GB les regroupent.
De toute façon, les codes pays sont fixés par les pays membres de UE et ne sont donc pas de moi.

Commentaire de Zlub le 03/02/2006 18:01:11

NB : ça serait sympas d'indiquer pourquoi vous mettez une mauvaise note afin que je puisse améliorer le code ou clarifier des points. Sinon ça n'a pas de sens.

Commentaire de Yurck le 09/07/2009 14:41:34 8/10

Merci pour ton code.

A noter qu'un contrôle supplémentaire peut être fait sur la tva intra française.

En effet sa structure est ainsi faite

FR XX 999 9999 99Y
Où XX représente une clef informatique dont je ne connais pas la méthode de contrôle
mais Y est une clé de contrôle des 8 chiffres précédents (le tout formant le code SIREN)

Le principe est le suivant : on multiplie les chiffres de rang impair à partir de la droite par 1,
ceux de rang pair par 2 ; la somme des chiffres obtenus doit être un multiple de 10.

exemple : soit le SIREN 732 829 320
pour vérifier :     7 3 2  8  2  9 3 2 0
rang pair x 2 :       6    16    18   4
rang impair x 1 : 7    2      2     3   0
                           ----------------------
somme :             7+6+2+1+6+2+1+8+3+4+0 = 40
Le numéro est exact.


Je ne connais pas le VB alors je laisse le soin à qui en a besoin de faire ce bout de code.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Case TVA?? [ par gatsso ] Bonjour a tous,je d'acheter le bouquin EXCEL2002 et je ne m'en sort pas c'est peut etre parce que j'ai EXCEL 97? bref je fait mon facturier et j'aimer Maskedbox1 [ par petiflamand ] Salut comment faire pour effacer un maskedboxen effet je rentre dedans un numero de tvaau format 123/123/123puis si il y a pas de tva pour un clientje Clé TVA Intracommunautaire [ par MadJax ] Bonjour &#224; tous et bonne ann&#233;e, Ma question est simple. Je cherche un algo permettant de g&#233;n&#233;rer un N&#176; TVA Intracommunautaire comment eviter plein de if ??? dans une boucle [ par petiflamand ] bonjour , je doit faire un calcul entre 300 a 400 ligne chauque jourdans c'est ligne j'ai des champ avec des numero entre 1 et 89je vourais savoir si Probleme avec datagridviewcomboboxcell vb2005 [ par chris81 ] bonjour,j'ai ub datagridview avec une comboboxcolumn que je remplit ainsi dans le chargement de ma page.[CODE]        Dim MyTVA As New tvaDim Myds As Calculer la TVA à 19.6% ou plus Simplement un pourcentage ? [ par Dri60 ] Bonjour, je voulais savoir si il existe une Fonction pour Calculer la TVA à 19.6% ou plus Simplement un pourcentage ?Merci d'avance. Dri60 Requette imbriqué VB.net [ par perlitta3000 ] BonjourSVP j'ai besoin de votre aide. Je extraire des donnees de plusieurs tables c-a-d je veux creer une sqlcommand qui contient une requette sql imb Application de calcul de TVA au maroc avec VB2005 [ par etarik87 ] bsr mes freres les developpeurs je suis un etudiant dans une ecole d'informatique appliquée a la gestion on a fait de la programmation c'est juste une Lecture avec agrégat group by pour recordset [ par petiflamand ] bonjour voici ma requete [code=vb]Set rs = db.OpenRecordset("select num_dep,total_hors_tva,sum(vat.total_tva_comprise),montant_tva As titi FROM vat W


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales