webForumDet fria alternativet

kod till matematisk formel

2 svar · 389 visningar · startad av Qonos

QonosMedlem sedan sep. 2000438 inlägg
#1

hejsan sitter och skall göra om en funktion till php från C men får det inte att fungera så nu undrar jag om någon av er vet vilken matematisk formel denna funktionen använder

#define CHARINT(c) (int) ((c) - '0')
#define LENVATSE 12
typedef enum { FALSE, TRUE } Bool;

static Bool CheckSe (char *pStringVatNo)
{
register int i;
register int accu = 0;
register int res;

for (i = 0; i <= 8; i+=2)
{
res = 2 * CHARINT ( *(pStringVatNo + i) );
if (res > 9)
res -= 9;
accu += res;
}

for (i = 1; i <= 7; i+=2)
{
accu += CHARINT ( *(pStringVatNo + i) );
}

res = 10 - accu % 10;
if (res == 10)
res = 0;

return (CHARINT (*(pStringVatNo + LENVATSE - 3)) == res) ? TRUE :
FALSE;

}

nikoMedlem sedan juni 20022 599 inlägg
#2

Den använder väl inte direkt någon känd matematisk formel à la Pythagoras sats, om det är det du menar?

Vad den gör är helt enkelt att validera formatet hos ett VAT-nummer.

I pseudokod borde det bli:

för siffra 0,2,4,6,8 i VAT-Numret
{
	om (siffervärdet>4)
		sätt: accu=accu+2*siffervärdet-9
	annars
		sätt: accu=accu+2*siffervärdet
}

för siffra 1,3,5,7 i VAT-Numret
{
	sätt: accu=accu+siffervärdet
}

res=10-(resten vid accu heltalsdividerat med 10)

om res=10 sätt: res=0

om (siffra 9 i VAT-Numret=res)
	VAT-Nummer OK!
annars
	VAT-Nummer inte OK!

Om man sen kan PHP så borde det inte vara så svårt att implementera det. :)

QonosMedlem sedan sep. 2000438 inlägg
#3

tack.. jag har gjort om den till php och det fungerade, men felet var det att jag behövde göra lite mer för att den skulle fungera riktigt

122 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
120 ms — hämta tråd, inlägg och bilagor (db)