Jump to content
  • 0

Controle van BTW nummers binnen de EEG


Bruno

Question

Posted

Als nieuw lid van dit forum wil ik onmiddellijk uitpakken met een interessante custom function.

Ik heb ze EEC_VAT(landcode,vat_number) gedoopt.

 

Ik gebruik deze functie als volgt

Ik heb in mijn customerDB 2 velden nl. cst_landcode (een lookuplist met al landcodes die dan onmiddellijk het land en de telefoonprefix weergeeft)

en cst_VAT d.i. het veld waar de BTW-nr op correct wijze in moet verschijnen onder de vorm bvb AT-U12345678 of BE-403762597

 

In het veld cst_VAT gebruik ik onder auto-enter calculated value

bovenstaande formule als volgt: EEC_VAT(cst_landcode,cst_VAT) zodat in

cst_VAT de BTW-nr wordt gecontroleerd en in de juiste vorm wordt weergegeven. Is het nummer fout dan verschijnt er Invalid number,

is het geen EG-land dan blijft het veld leeg.

 

Hier de functie. Laat me weten indien er dingen eenvoudiger kunnen en of er andere en of betere controles kunnen uitgevoerd worden.

 

*************************************************************

//Alle spaties en andere rommel filteren uit het ingegeven nummer

 

Let([nummer=Upper(Filter(vat_number;"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"));

 

land=Upper(landcode);

 

controlegetal_BE=97 - Mod(Left(nummer;7);97);

 

VAT=Upper(landcode)&"-"&nummer;

 

alleen_getallen=Filter(vat_number;"0123456789");

 

nummer_IE=Upper(Filter(vat_number;"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789*+"))];

 

//Als de eerste 2 karakters = karakter 4 en 5 zoals in bvb AT-AT12345 dan gooien we

//4 en 5 eruit

 

Case(

Left(land&"-"&nummer;2)=Middle(land&"-"&nummer;4;2);

Left(land&"-"&nummer;3)&Middle(land&"-"&nummer;6;Length(land&"-"&nummer)-5);

 

//Controle van de BTW identificatiestructuur

 

//Oostenrijk 1e=U en dan 8 cijfers

landcode="AT";Case(Length(Right(alleen_getallen;8))=8 and Left(nummer;1)="U";

VAT;"Invalid Number");

 

//Belgie - 9 of 10 cijfers en controlegetal

landcode="BE";Case(Length(alleen_getallen)=9

and GetAsNumber(Right(nummer;2))=controlegetal_BE or

 

Length(alleen_getallen)=10 and GetAsNumber(Right(nummer;2))=controlegetal_BE;

VAT;"Invalid Number");

 

//Cyprus 8 cijfers + laatste = letter

landcode="CY";Case(Length(Left(alleen_getallen;8))=8 and Length(Right(Filter(nummer;"ABCDEFGHIJKLMNOPQRTUVWXYZ");1))=1 ;

VAT;"Invalid Number");

 

//Tsjechie 8,9 0f 10 cijfers

landcode="CZ";Case(Length(alleen_getallen)<11 and Length(alleen_getallen)>7;

VAT;"Invalid Number");

 

//Duitsland 9 cijfers

landcode="DE";Case(Length(alleen_getallen)=9;

VAT;"Invalid Number");

 

//Denemarken 8 cijfers

landcode="DK";Case(Length(alleen_getallen)=8;

VAT;"Invalid Number");

 

//Estland 9 cijfers

landcode="EE";Case(Length(alleen_getallen)=9;

VAT;"Invalid Number");

 

//Griekenland 9 cijfers en landcode wordt EL

landcode="GR";Case(Length(alleen_getallen)=9;

"EL-"&nummer;"Invalid Number");

 

//Spanje 9 karakters waarvan 1e en laatste ook alfanummeriek kunnen zijn

//Beiden kunnen ze echter niet nummeriek zijn

landcode="ES";Case(Length(alleen_getallen)=8 and Length(nummer)=9;

VAT;"Invalid Number");

 

//Finland 8 cijfers

landcode="FI";Case(Length(alleen_getallen)=8;

VAT;"Invalid Number");

 

//Frankrijk 11 karakters waarvan eerste 2 ook letters kunnen zijn

landcode="FR";Case(Length(nummer)=11 and Length(Right(alleen_getallen;9))=9;

VAT;"Invalid Number");

 

//Verenigd Koninkrijk 4 mogelijkheden

//mogelijkheid 1: 9 cijfers

landcode="GB";Case(Length(alleen_getallen)=9 or

 

//mogelijkheid 2: 12 cijfers voor "Branch traders"

Length(alleen_getallen)=12 or

 

 

//mogelijkheid 3: 5 karakters waarvan eerste 2 "GD" voor Government Departments

Length(Right(alleen_getallen;3))=3 and Left(nummer;2)="GD" or

 

//mogelijkheid 4: 5 karakters waarvan eerste 2 "HA" voor Health Authorities

Length(Right(alleen_getallen;3))=3 and Left(nummer;2)="HA";

VAT;"Invalid Number");

 

//Hongarije 8 cijfers

landcode="HU";Case(Length(alleen_getallen)=8;

VAT;"Invalid Number");

 

//Ierland 8 karakters waarvan laatste een letter,geen volledige controle

landcode="IE";Case(Length(nummer)=8 and Length(Left(alleen_getallen;1))=1

and Length(Right(Filter(nummer;"ABCDEFGHIJKLMNOPQRTUVWXYZ");1))=1

;

VAT;"Invalid Number");

 

//Italie 11 cijfers

landcode="IT";Case(Length(alleen_getallen)=11;

VAT;"Invalid Number");

 

//Litouwen 9 of 12 cijfers

landcode="LT";Case(Length(alleen_getallen)=12 or Length(alleen_getallen)=9;

VAT;"Invalid Number");

 

//Luxemburg 8 cijfers

landcode="LU";Case(Length(alleen_getallen)=8;

VAT;"Invalid Number");

 

//Letland 11 cijfers

landcode="LV";Case(Length(alleen_getallen)=11;

VAT;"Invalid Number");

 

//Malta 8 cijfers

landcode="MT";Case(Length(alleen_getallen)=8;

VAT;"Invalid Number");

 

//Nederland 12 karakters en positie 10=B

landcode="NL";Case(Length(alleen_getallen)=11 and Middle(nummer;10;1)="B";

VAT;"Invalid Number");

 

//Polen 10 cijfers

landcode="PL";Case(Length(alleen_getallen)=10;

VAT;"Invalid Number");

 

//Portugal 9 cijfers

landcode="PT";Case(Length(alleen_getallen)=9;

VAT;"Invalid Number");

 

//Zweden 12 cijfers

landcode="SE";Case(Length(alleen_getallen)=12;

VAT;"Invalid Number");

 

//Slovenie 8 cijfers

landcode="SL";Case(Length(alleen_getallen)=8;

VAT;"Invalid Number");

 

//Slowakije 10 cijfers

landcode="SK";Case(Length(alleen_getallen)=10;

VAT;"Invalid Number");

 

//al de rest blijft leeg want niet in de EEG

 

" " )

)

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...