numberGenerator

Random nummer generatie in Microsoft Dynamics NAV

Normaal is het geen probleem om een random nummer te genereren, helaas in Navision wel.
De random functie is niet random en het maakt vaak dezelfde nummers aan. Dus in plaats van te rekenen op de niet-zo-random-nummers heb ik mijn eigen functie aangemaakt.

Ik zal mijn functie verduidelijken aan de hand van de code.

Ik wil 10 verschillende nummers genereren.
intGiveRandomNumbers := 10;
i := 0;
IF intGiveRandomNumbers > 0 THEN REPEAT
i += 1;
Alle nummers moeten een voorvoegsel hebben. In mijn voorbeeld neem ik ‘BON’ als voorvoegsel.
txtPrefix := ‘BON’;
intRandomLength := 15;
Er zijn verschillende manieren om een ‘random’ nummer te maken. Een van de manieren is om te werken met de huidige datum.
// Date
dteToday := TODAY;
intDay := DATE2DMY(dteToday,1);
intWeek := DATE2DMY(dteToday,2);
intYear := DATE2DMY(dteToday,3);
intRandomDependingOnDate := RANDOM(100) * intDay + intWeek * intYear;
Een andere manier is om de huidige tijd erbij te betrekken
// Time
txtThousandsOfSecond := FORMAT(TIME(),0,'<Thousands,3>’);
txtSecond := FORMAT(TIME(),0,'<Seconds,2>’);
txtRandomDepeningOnRandomize := PADSTR(FORMAT(intRandomDependingOnDate),3) +
FORMAT(txtThousandsOfSecond) + FORMAT(txtSecond) ;
Een andere manier is om POWER functie erbij te betrekken welke aan de hand van de huidige tijd een nummer aanmaakt.
// Power
EVALUATE(intPower,COPYSTR(txtThousandsOfSecond,1,2));
EVALUATE(intPowerNumber,COPYSTR(txtThousandsOfSecond,3,1));
txtPower := FORMAT(RANDOM(50) * POWER(intPower,intPowerNumber));
txtPower := DELCHR(txtPower, ‘=’, ‘.’);
txtPower := DELCHR(txtPower, ‘=’, ‘ ‘);
txtRandomDepeningOnRandomize += FORMAT(PADSTR(txtPower, 3));
En als het echt niet anders gaat kan je aanvullen met de RANDOM functie van Navision
// Random (It’s not random)
IF STRLEN(txtRandomDepeningOnRandomize) < intRandomLength THEN REPEAT
txtRandomDepeningOnRandomize := txtRandomDepeningOnRandomize + FORMAT(RANDOM(9));
UNTIL STRLEN(FORMAT(txtRandomDepeningOnRandomize)) = intRandomLength;
Plak alles aan elkaar en je het een redelijk uniek random nummer.
txtPrefix += txtRandomDepeningOnRandomize;
MESSAGE(txtPrefix);
UNTIL i = intGiveRandomNumbers;

Oke, tot zover de functie. Het is nog niet perfect maar het is goed genoeg om als voorbeeld te gebruiken.

Indien je nog bijkomende vragen hebt of iets wilt toevoegen kan je me steeds bereiken.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *