12345678 er ikke et dansk CVR-nr. dit vrøvlehoved

“Næsten” alle ved at der er modulus kontrol på Giro/FIK-betaleridentifikation og CPR-numre. Men vidste du at der også er på danske CVR-numre?

 

Følgende er en stump Dynamics NAV kode der validerer om et dansk CVR-nummer er lovligt. Det er sakset ud af en Codeunit-teksteksport, så er du familiær med udvikling i Dynamics NAV burde det være simpelt at implementere i din egen kode:

 

PROCEDURE DanishVATNoValid@1000000012(VATNo@1000000000 : Text[20]) : Boolean;
VAR
  Sum@1000000001 : Integer;
  Counter@1000000002 : Integer;
  Digit@1000000003 : Integer;
BEGIN
  VATNo := StrKeep(VATNo,'0123456789');
  IF STRLEN(VATNo) > 8 THEN
    EXIT(FALSE);
  WHILE STRLEN(VATNo) < 8 DO
    VATNo := '0' + VATNo;
  FOR Counter := 1 TO 8 DO BEGIN
    EVALUATE(Digit, COPYSTR(VATNo,Counter,1) );// Weights are 2,7,6,5,4,3,2,1
    IF Counter = 1 THEN
      Sum += Digit * 2
    ELSE
      Sum += Digit * (9-Counter);
  END;
  EXIT( Sum MOD 11 = 0 );
END;

 

Den tilsvarende stump Klassisk Dynamics C5 kode (implementeret som funktion) er her:

FUNCTION ENUM NoYes ValidateDKVatNo (STR 25 &VatNumber)
  SET &VatNumber = StrKeep(&VatNumber,'0123456789')
  WHILE StrLen(&VatNumber) < 8
    SET &VatNumber = '0'+&VatNumber
  END
RETURN StrLen(&VatNumber) == 8 AND
       (Str2Int(SubStr(&VatNumber,1,1)) * 2 +
        Str2Int(SubStr(&VatNumber,2,1)) * 7 +
        Str2Int(SubStr(&VatNumber,3,1)) * 6 +
        Str2Int(SubStr(&VatNumber,4,1)) * 5 +
        Str2Int(SubStr(&VatNumber,5,1)) * 4 +
        Str2Int(SubStr(&VatNumber,6,1)) * 3 +
        Str2Int(SubStr(&VatNumber,7,1)) * 2 +
        Str2Int(SubStr(&VatNumber,8,1)) * 1  ) MOD 11 == 0

 

Bemærk at der også findes validering af danske bankkonti, men at algoritmerne er forskellige fra bank til bank. Bankerne udveksler godt nok en liste over hvordan de gør – men den er desværre ikke offentlig tilgængelig.

 

Bemærk også at EU har et system til validering af såvel danske som europæiske CVR-numre. Det hedder VIES og kan kaldes direkte med webservice.
VIES checker ikke om noget checkciffer stemmer – men slår rent faktisk CVR-nummeret op og fortæller hvem der “ejer” det.

 

SystemConnect har et lille modul til Microsoft XAL, Klassisk Dynamics C5 og Dynamics NAV, der kan validere kunder op mod VIES webservice. Kontakt evt. SystemConnect for at høre nærmere.

 

Du kan læse mere om VIES på adressen: http://ec.europa.eu/taxation_customs/vies/?locale=da