• Random number generator. Random number generator for lottery

    • Tutorial

    Have you ever wondered how Math.random() works? What is a random number and how is it obtained? Imagine an interview question - write your random number generator in a couple of lines of code. So, what is it, an accident and is it possible to predict it?

    I am very fascinated by various IT puzzles and tasks, and the random number generator is one of these tasks. Usually in my Telegram channel I analyze all sorts of puzzles and various tasks from interviews. The random number generator problem has gained great popularity and I wanted to perpetuate it in the depths of one of the authoritative sources of information - that is, here on Habré.

    This material will be useful to all those front-end and Node.js developers who are on the cutting edge of technology and want to get into a blockchain project/startup, where even front-end developers are asked questions about security and cryptography, at least at a basic level.

    Pseudo-random number generator and random number generator

    In order to get something random, we need a source of entropy, a source of some chaos from which we will use to generate randomness.

    This source is used to accumulate entropy and then obtain from it an initial value (seed), which is necessary for random number generators (RNG) to generate random numbers.

    The Pseudo-Random Number Generator uses a single seed, hence its pseudo-randomness, while the Random Number Generator always generates a random number by starting with a high-quality random variable that is drawn from various sources of entropy.

    Entropy is a measure of disorder. Information entropy is a measure of the uncertainty or unpredictability of information.
    It turns out that in order to create a pseudo-random sequence we need an algorithm that will generate a certain sequence based on a certain formula. But such a sequence can be predicted. However, let's imagine how we could write our own random number generator if we didn't have Math.random()

    PRNG has some algorithm that can be reproduced.
    RNG is the process of obtaining numbers entirely from some kind of noise, the ability to calculate which tends to zero. At the same time, the RNG has certain algorithms for equalizing the distribution.

    We come up with our own PRNG algorithm

    Pseudorandom number generator (PRNG) is an algorithm that generates a sequence of numbers whose elements are almost independent of each other and obey a given distribution (usually uniform).
    We can take a sequence of some numbers and take the modulus of the number from them. The simplest example that comes to mind. We need to think about which sequence to take and the module from what. If you just directly from 0 to N and modulus 2, you get a generator of 1 and 0:

    Function* rand() ( const n = 100; const mod = 2; let i = 0; while (true) ( ​​yield i % mod; if (i++ > n) i = 0; ) ) let i = 0; for (let x of rand()) ( if (i++ > 100) break; console.log(x); )
    This function generates the sequence 01010101010101... and it cannot even be called pseudo-random. For a generator to be random, it must pass the next bit test. But we don’t have such a task. Nevertheless, even without any tests we can predict the next sequence, which means that such an algorithm is not suitable, but we are in the right direction.

    What if we take some well-known but non-linear sequence, for example the number PI. And as the value for the module we will take not 2, but something else. You can even think about the changing value of the module. The sequence of digits in Pi is considered random. The generator can operate using Pi numbers starting from some unknown point. An example of such an algorithm, with a PI-based sequence and a variable module:

    Const vector = [...Math.PI.toFixed(48).replace(".","")]; function* rand() ( for (let i=3; i<1000; i++) { if (i >99) i = 2; for (let n=0; n But in JS, the PI number can only be displayed up to 48 digits and no more. Therefore, it is still easy to predict such a sequence, and each run of such a generator will always produce the same numbers. But our generator has already started showing numbers from 0 to 9.

    We got a generator of numbers from 0 to 9, but the distribution is very uneven and it will generate the same sequence every time.

    We can take not the number Pi, but time in numerical representation and consider this number as a sequence of numbers, and in order to ensure that the sequence does not repeat each time, we will read it from the end. In total, our algorithm for our PRNG will look like this:

    Function* rand() ( let newNumVector = () => [...(+new Date)+""].reverse(); let vector = newNumVector(); let i=2; while (true) ( ​​if ( i++ > 99) i = 2; let n=-1; while (++n< vector.length) yield (vector[n] % i); vector = newNumVector(); } } // TEST: let i = 0; for (let x of rand()) { if (i++ >100) break; console.log(x)
    This already looks like a pseudo-random number generator. And the same Math.random() is a PRNG, we’ll talk about it a little later. Moreover, each time we get a different first number.

    Actually, using these simple examples you can understand how more complex random number generators work. And there are even ready-made algorithms. As an example, let’s look at one of them — this is the Linear Congruent PRNG (LCPRNG).

    Linear congruent PRNG

    Linear congruent PRNG (LCPRNG) is a common method for generating pseudorandom numbers. It is not cryptographically strong. This method consists of calculating the terms of a linear recurrent sequence modulo some natural number m, given by the formula. The resulting sequence depends on the choice of starting number — i.e. seed. With different seed values, different sequences of random numbers are obtained. An example of implementing such an algorithm in JavaScript:

    Const a = 45; const c = 21; const m = 67; var seed = 2; const rand = () => seed = (a * seed + c) % m; for(let i=0; i<30; i++) console.log(rand())
    Many programming languages ​​use LCPRNG (but not exactly this algorithm(!)).

    As mentioned above, such a sequence can be predicted. So why do we need PRNG? If we talk about security, then PRNG is a problem. If we talk about other tasks, then these properties can be a plus. For example, for various special effects and graphics animations, you may need to frequently call random. And this is where the distribution of meanings and performance are important! Secure algorithms cannot boast of speed.

    Another property is reproducibility. Some implementations allow you to specify a seed, and this is very useful if the sequence must be repeated. Reproduction is needed in tests, for example. And there are many other things that do not require a secure RNG.

    How Math.random() works

    The Math.random() method returns a pseudo-random floating point number from the range = crypto.getRandomValues(new Uint8Array(1)); console.log(rvalue)
    But, unlike the Math.random() PRNG, this method is very resource-intensive. The fact is that this generator uses system calls in the OS to gain access to entropy sources (mac address, CPU, temperature, etc...).

    Etc., and is used by account owners to attract new audiences to the community.

    The result of such drawings often depends on the user's luck, since the recipient of the prize is determined randomly.

    To make this determination, lottery organizers almost always use an online or pre-installed random number generator that is distributed free of charge.

    Choice

    Quite often, choosing such a generator can be difficult, since their functionality is quite different - for some it is significantly limited, for others it is quite wide.

    A fairly large number of such services are being implemented, but the difficulty is that they differ in scope.

    Many, for example, are tied by their functionality to a specific social network (for example, many generator applications only work with links from this one).

    The simplest generators simply randomly determine a number within a given range.

    This is convenient because it does not associate the result with a specific post, which means it can be used for sweepstakes outside the social network and in various other situations.

    They essentially have no other use.

    Advice! When choosing the most suitable generator, it is important to consider what it will be used for.

    Specifications

    For the fastest process of choosing the optimal online service for generating random numbers, the table below shows the main technical characteristics and functionality of such applications.

    Table 1. Features of the functioning of online applications for generating a random number
    Name Social network Multiple results Select from a list of numbers Online widget for the site Select from a range Disabling repetitions
    RandStuff Yes Yes No Yes No
    Cast Lots Official website or VKontakte No No Yes Yes Yes
    Random number Official website No No No Yes Yes
    Randomus Official website Yes No No Yes No
    Random numbers Official website Yes No No No No

    All applications discussed in the table are described in more detail below.

    RandStuff

    You can use this application online by following the link to its official website http://randstuff.ru/number/.

    This is a simple random number generator, characterized by fast and stable operation.

    It is successfully implemented both in the format of a separate stand-alone application on the official website, and as an application in .

    The peculiarity of this service is that it can select a random number both from a specified range and from a specific list of numbers that can be specified on the site.

    • Stable and fast work;
    • Lack of direct connection to a social network;
    • You can select one or several numbers;
    • You can only choose among the specified numbers.

    User reviews of this application are as follows: “We determine winners in VKontakte groups through this service. Thank you,” “You are the best,” “I only use this service.”

    Cast Lots

    This application is a simple function generator, implemented on the official website in the form of a VKontakte application.

    There is also a generator widget for inserting into your website.

    The main difference from the previous described application is that this allows you to disable the repetition of the result.

    Good day everyone.

    I suggest you check out the next useful things - as many as 3 online generators. Their main feature is that everything works without reloading the page, very, very quickly.

    A phrase generator can be useful if you need to come up with a name for the monsters in your toy or “screw in” a funny phrase in a friendly argument, for lotteries or simulating a “coin toss” you need to generate a group of random numbers, and to prevent account hacking you need a strong password . All this can be easily obtained using the specified criteria on this page.

    Title generator

    It can be simply irreplaceable in a squabble with comrades, when you need to quickly find a non-standard phrase and cool down an ardent friend. But you can use it simply to lift your spirits. The name generator is very easy to use: just select the type of phrase, the algorithm (partially predefined words or alternating letters of a given size) and click the name generation button.

    Password generator

    Everyone knows that a strong password is a good guarantee against account hacking. Of course, this does not mean that it cannot be stolen, but the likelihood that it will be picked up tends to zero. An online password generator is a good way to quickly get a random string that you can safely use without fear of it being declassified. Numbers, letters of the Latin alphabet and the following symbols are available:

    !№;%:?*()_+=-~/<>,.{}

    Using the default settings you can get a great password, but remember that its strength is determined not only by the number of characters, but also by their variety. A number string is quite easy to solve using the usual brute force method, but in the case where it additionally contains letters of different case, it will take an prohibitively long time to solve.

    Number generator

    There are situations when you need to get a certain amount of random numbers right now. For example, you need to fill out a lottery ticket “5 out of 36”, and you want to do this by trusting chance. Or test the theory of probability - if you flip a coin 30 times, can you get 8 reverses in a row (the numbers 0 and 1 are quite suitable as heads/tails)?

    The random number generator for lottery tickets is provided free of charge in an “as is” format. The developer does not bear any responsibility for material and non-material losses of script users. You may use this service at your own risk. However, no matter what, you definitely don’t want to take risks :-).

    Random numbers for online lottery tickets

    This software (RNG in JS) is a pseudo-random number generator implemented using the Javascript programming language. The generator produces a uniform distribution of random numbers.

    This allows you to knock out a “wedge with a wedge” on the RNG with a uniform distribution from the lottery company to respond with random numbers with a uniform distribution. This approach eliminates the subjectivity of the player, since people have certain preferences in choosing numbers and numbers (Birthdays of relatives, memorable dates, years, etc.), which affect the selection of numbers manually.

    The free tool helps players select random numbers for lotteries. The random number generator script has a set of pre-configured modes for Gosloto 5 out of 36, 6 out of 45, 7 out of 49, 4 out of 20, Sportloto 6 out of 49. You can select a random number generation mode with free settings for other lottery options.

    Lottery winning predictions

    A random number generator with uniform distribution can serve as a horoscope for a lottery draw, although the probability that the forecast will come true is low. But still, using a random number generator has a good probability of winning compared to many other lottery strategies and additionally frees you from the pain of difficult selection of lucky numbers and combinations. For my part, I do not advise you to give in to the temptation and buy paid forecasts; it is better to spend this money on a textbook on combinatorics. You can learn a lot of interesting things from it, for example, the probability of winning the jackpot in Gosloto is 5 out of 36 1 To 376 992 . And the probability of getting the minimum prize by guessing 2 numbers is 1 To 8 . The forecast based on our RNG has the same probabilities of winning.

    There are requests on the Internet for random numbers for the lottery, taking into account past draws. But provided that the lottery uses RNG with a uniform distribution and the probability of getting one or another combination does not depend on each draw, then it is pointless to try to take into account the results of past draws. And this is quite logical, since it is not profitable for lottery companies to allow participants to use simple methods to increase the likelihood of winning.

    There is often talk that lottery organizers are rigging the results. But in fact, this makes no sense, even, on the contrary, if lottery companies influenced the results of the lottery, then it would be possible to find a winning strategy, but so far no one has succeeded. Therefore, it is very profitable for lottery organizers that the balls fall out with uniform probability. By the way, the estimated return on lottery 5 out of 36 is 34.7%. Thus, the lottery company retains 65.3% of the proceeds from ticket sales, part of the funds (usually half) is allocated to the formation of the jackpot, the rest of the money goes to organizational expenses, advertising and the company’s net profit. Circulation statistics perfectly confirm these figures.

    Hence the conclusion - do not buy meaningless forecasts, use a free random number generator, take care of your nerves. Let our random numbers become your lucky numbers. Have a good mood and have a great day!

    We have a sequence of numbers consisting of practically independent elements that obey a given distribution. As a rule, uniform distribution.

    You can generate random numbers in Excel in different ways and methods. Let's consider only the best of them.

    Random Number Function in Excel

    1. The RAND function returns a random, uniformly distributed real number. It will be less than 1, greater than or equal to 0.
    2. The RANDBETWEEN function returns a random integer.

    Let's look at their use with examples.

    Sampling random numbers using RAND

    This function requires no arguments (RAND()).

    To generate a random real number in the range from 1 to 5, for example, use the following formula: =RAND()*(5-1)+1.

    The returned random number is distributed uniformly over the interval.

    Each time the worksheet is calculated or the value in any cell in the worksheet changes, a new random number is returned. If you want to save the generated population, you can replace the formula with its value.

    1. Click on the cell with a random number.
    2. In the formula bar, select the formula.
    3. Press F9. AND ENTER.

    Let's check the uniformity of the distribution of random numbers from the first sample using a distribution histogram.


    The range of vertical values ​​is frequency. Horizontal - “pockets”.

    

    RANDBETWEEN function

    The syntax for the RANDBETWEEN function is (lower bound; upper bound). The first argument must be less than the second. Otherwise the function will throw an error. The boundaries are assumed to be integers. The formula discards the fractional part.

    Example of using the function:

    Random numbers with precision 0.1 and 0.01:

    How to make a random number generator in Excel

    Let's make a random number generator that generates a value from a certain range. We use a formula like: =INDEX(A1:A10,INTEGER(RAND()*10)+1).

    Let's make a random number generator in the range from 0 to 100 in steps of 10.

    You need to select 2 random ones from the list of text values. Using the RAND function, we compare text values ​​in the range A1:A7 with random numbers.

    Let's use the INDEX function to select two random text values ​​from the original list.

    To select one random value from the list, use the following formula: =INDEX(A1:A7,RANDBETWEEN(1,COUNT(A1:A7))).

    Normal distribution random number generator

    The RAND and RANDBETWEEN functions produce random numbers with a uniform distribution. Any value with the same probability can fall into the lower limit of the requested range and into the upper one. This results in a huge spread from the target value.

    A normal distribution implies that most of the generated numbers are close to the target number. Let's adjust the RANDBETWEEN formula and create a data array with a normal distribution.

    The cost of product X is 100 rubles. The entire batch produced follows a normal distribution. A random variable also follows a normal probability distribution.

    Under such conditions, the average value of the range is 100 rubles. Let's generate an array and build a graph with a normal distribution with a standard deviation of 1.5 rubles.

    We use the function: =NORMINV(RAND();100;1.5).

    Excel calculated which values ​​were within the probability range. Since the probability of producing a product with a cost of 100 rubles is maximum, the formula shows values ​​close to 100 more often than others.

    Let's move on to plotting the graph. First you need to create a table with categories. To do this, we divide the array into periods:

    Based on the data obtained, we can generate a diagram with a normal distribution. The value axis is the number of variables in the interval, the category axis is periods.