IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

V�rification du n� de TVA belge


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Mvu
    Mvu est d�connect�
    Membre �clair�
    Inscrit en
    Septembre 2002
    Messages
    248
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Par d�faut V�rification du n� de TVA belge
    Bonjour il y a 4 ans, javatwister m'a �crit le script suivant pour v�rifier la validit� d'un n� de TVA en Belgique:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	<script>
    	document.getElementById("f").addEventListener("submit",function(e){
    		const ch=e.target["tva"].value,// le champ tva
    		ch2=parseInt(ch.slice(1,8));// le champ tva sans le début et la fin
     
    		if(!/^0\d{9}$/.test(ch) || 97-(ch2-(parseInt(ch2/97)*97))!=parseInt(ch.slice(8))){// le test
    			alert("<%=(getMsg(154,WrongVAT))%>");
    			e.preventDefault();// empêche la soumission du formulaire
    		}
    	})
    	</script>
    Le script ci-dessus r�pondait � la demande suivante: le num�ro de TVA commence par 0 et est en 10 chiffes.
    Pour v�rifier la validit� on laisse tomber le premier chiffre (0) et les deux derniers.
    Exemple:
    0472968436
    4729684 / 97 = 48759,628
    48759 * 97 = 4729623
    4729684 - 4729623 = 61
    97 - 61 = 36
    Cqfd.

    La donne a un peu chang�.
    Maintenant, le num�ro de TVA peut commencer par 1.
    La m�thode de v�rification reste inchang�e, sauf que maintenant, il faut consid�rer le premier chiffre (1 ou 0).
    Exemple:
    1003345828
    10033458 / 97 = 103437
    1034397 * 97 = 10033389
    10033458 -- 10033389 = 69
    97 - 69 = 28
    Cqfd

    Comment dois-je modifier le script ci-dessous pour l'adapter � la nouvelle situation ?
    Merci d'avance pour votre aide.

  2. #2
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Bonjour,
    sachant que
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    parseInt("0472968436".slice(0,8));
    >> 472968436  // le zéro devant non significatif n'est pas pris en compte
    et que
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    parseInt("1003345828".slice(0,8));
    >> 10033458  // le 1 devant est lui pris en compte
    il te faut modifier :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ch2=parseInt(ch.slice(1,8));// le champ tva sans le début et la fin
    en
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ch2=parseInt(ch.slice(0,8));// le champ tva les huit premier chiffres
    et ton test RegExp devient, � la louche et surement simplifiable, /^[0-1]\d{9}$/.

  3. #3
    Mvu
    Mvu est d�connect�
    Membre �clair�
    Inscrit en
    Septembre 2002
    Messages
    248
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Par d�faut
    Bonjour,
    Voici mon code maintanant:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	<script>
    	document.getElementById("f").addEventListener("submit",function(e){
    		const ch=e.target["tva"].value,// le champ tva
    		ch2=parseInt(ch.slice(0,8));// le champ tva sans le début et la fin
     
    		if(!/^0\d{9}$/.test(ch) || 97-(ch2-(parseInt(ch2/97)*97))!=parseInt(ch.slice(8))){// le test
    			alert("<%=(getMsg(154,WrongVAT))%>");
    			e.preventDefault();// empêche la soumission du formulaire
    		}
    	})
    	</script>
    J'ai test� avec le n� de TVA 0445299383, c'est bon.
    Mais pas avec 1003345828.

  4. #4
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Tu as oubli� de modifier :
    Citation Envoy� par NoSmoking
    et ton test RegExp devient, � la louche et surement simplifiable, /^[0-1]\d{9}$/.

  5. #5
    Mvu
    Mvu est d�connect�
    Membre �clair�
    Inscrit en
    Septembre 2002
    Messages
    248
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Par d�faut
    Re-bonjour,
    Toujours pas malheureusement.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	<script>
    	document.getElementById("f").addEventListener("submit",function(e){
    		const ch=e.target["tva"].value,// le champ tva
    		ch2=parseInt(ch.slice(0,8));// le champ tva sans le début et la fin
     
    		if(!/^[0-1]\d{9}$/.test(ch) || 97-(ch2-(parseInt(ch2/97)*97))!=parseInt(ch.slice(8))){// le test
    			alert("<%=(getMsg(154,WrongVAT))%>");
    			e.preventDefault();// empêche la soumission du formulaire
    		}
    	})
    	</script>

  6. #6
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Toujours pas malheureusement.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function test(ch) {
      ch2 = parseInt(ch.slice(0, 8));
      if (!/^[0-1]\d{9}$/.test(ch) || 97 - (ch2 - (parseInt(ch2 / 97) * 97)) != parseInt(ch.slice(8))) {
        console.log("ERREUR");
      }
      else {
        console.log("C'est bon");
      }
    }
    test("0445299383"); //>> C'est BON
    test("1003345828"); //>> C'est BON
    test("0472968436"); //>> C'est BON
    test("0472968437"); //>> ERREUR
    test("2472968436"); //>> ERREUR
    aurais-je rat� quelque chose !?!

  7. #7
    Expert confirm� Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activit� : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par d�faut
    Je ne vois pas d'erreur et visiblement �a fonctionne. J'aurais �crit [01] au lieu de [0-1] car il n'y a pas de rang de caract�res, juste deux caract�res possibles, et j'aurais utilis� la pattern pour faire le d�coupage.

    La division par 97, puis la multiplication de la partie enti�re par 97 et enfin la soustraction qui suit, ne sont en fait que l'op�ration modulo 97 mais exprim�e avec les op�rations courantes.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    const TVAForm = document.getElementById('f');
     
    TVAForm.addEventListener('submit', function(e) {
        const ch = e.target['tva'].value,
              pat = /^([01]\d{7})(\d{2})$/,
              m = ch.match(pat);
     
        if (m instanceof Array) {
            let [rad, key] = m.slice(1,3).map((n) => parseInt(n));
     
            if (97 - rad % 97 === key) {
                return;
            }
        }
     
        alert("<%=(getMsg(154,WrongVAT))%>");
        e.preventDefault();
    });
    demo fiddle

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [AC-2007] Verifier Num�ro tva belge
    Par badibad dans le forum VBA Access
    R�ponses: 4
    Dernier message: 21/09/2019, 23h48
  2. D�claration TVA belge
    Par RisingDev dans le forum Odoo (ex-OpenERP)
    R�ponses: 1
    Dernier message: 20/04/2015, 11h19
  3. R�ponses: 4
    Dernier message: 28/01/2009, 10h23
  4. besoin d aide et de vrification algo tri bulle
    Par dju.ly dans le forum Algorithmes et structures de donn�es
    R�ponses: 3
    Dernier message: 30/12/2005, 13h04
  5. Modifier un champs texte avec une fonction PHP (calcul TVA)
    Par Stella2809 dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 22/11/2005, 00h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo