I used to generate  apparent 'random' by having a function like

x = (x + static-largishprimenumber) mod maxrange

(eg x = (129123 + 12391) mod 1,000,000,000

That always seemed to work for me, and it would take 1000,000 tries to reuse
the values, wouldnt it??

I'd prefer to not go AAAA0000 AAAA0001; the other way to go around this, is
to IN FACT increment one step at a tme, but the "numbersystem" is not
0-9,A-Z, but J0Z31AQC5NUWSL7DBKRFOEXVTI294MGYPO68H. Of course, only one
digit will change a time...


Siggy


----- Original Message -----
From: "Svensson, B.A.T. " <[EMAIL PROTECTED]>
To: "Sigurd Magnusson" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: Wednesday, January 24, 2001 8:55 AM
Subject: RE: [PHP-WIN] Random Code


> Indeed a very interesting question you put forward (and probably OOT too
:-)
>
> In programming there does not exist "The Best Way". "Best" always depends
on
> what you consider to be important and less important - that's why
> programmers most often writes same piece of code in different ways, and
> that's why one should be considerate about to think an extra time before
one
> classifies some other programmers code as "crap shit". :)
> (For ex there might be a reasons like "The Best Way" why M$ made there OS
> code as they did - though it hard for use normal mortal none-devine
> programmers to perceive it... :)
>
> There exists a class of 1-1 functions that behaves "randomly", you can
uses
> one of these. They are well know from analytic math. In principle they
work
> like this: in the beginning (x close to zero) the curve f(x) behave
> relatively nice like any other curve, but as one progress further away
from
> zero (towards +oo) f(x) starts to get a shape that reminds of a truly
random
> distributed curve, but f(x) is of course still functional dependent - that
> is, "FOR-EVERY(a) : IF f(a)=Y1 AND f(a)=Y2 THEN Y1=Y2", read: for each
time
> you execute the function with an input, it will yield the same output as
the
> previous calculation with the very same input. In other words, the
function
> result is determent in advance (that is not randomly generated) - but
still:
> it is bloody hard to predict its output in without actually having done
the
> calculation in advance. ;)
>
> The "only" thing you then have to do is two things:
>
> 1) create a mapping function for the output, for ex: 1 == 'AAAA-0000', 2
==
> 'AAAA-0001', etc, etc, or what ever way you like it to be.
>
> 2) keep track of "used" numbers.
>
>
> One simple, but naive, approach to 2) would be to simply starting at a
> specific predetermined number (x-value), and then just increment x with a
> fixed factor, for ex 0,1 (= 0.1, in U.S. notation), or Pi, or
> whatever-you-feel-for, whenever you need to produce a new number However,
> this does not guarantee uniqueness, which means that you need to check the
> current output value against all previous output values. This is made
simple
> by a brute force algorithm which, obviously, scans the previous number
> whether an output of this value has been or not has been produced before.
>
> This is the "best" way if you want to write a simple algorithm, but it is
> not the best way considering CPU load on the system. For this, there exist
> hashing techniques to keep track of large number of values, this might be
> fast finders of used numbers. This could be considered "best" from an
> CPU-minimization approach, but the programming gets a little bit more
> tricky.
>
> But happily enough, as this forum implicitly is about databases, one can
> "cheat" and store the numbers in the database(!), index the table that
> stores the values, and then get rid of the problem to have to write the
> hashing algorithms - since it already done in the DBMS.
>
>
> >-----Original Message-----
> >From: Sigurd Magnusson [mailto:[EMAIL PROTECTED]]
> >Sent: Tuesday, January 23, 2001 9:59 AM
> >To: [EMAIL PROTECTED]
> >Subject: [PHP-WIN] Random Code
> >
> >
> >Whats the best way to make a completely random, unique code in
> >the format "ABCD-1234" where each of the 8 characters can be
> >alphanumerc; 0-9,A-Z... I thought about generating a 36^4
> >number, converting to to base '36', and repeating the process.
> >What's a good way to ensure the code is not repeated, though?
> >
> >Siggy
> >
>


-- 
PHP Windows Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to