DEV Community

Cover image for creating own RANDOM number generator
Atul Kushwaha
Atul Kushwaha

Posted on • Edited on

creating own RANDOM number generator

Introduction:

Have you ever wondered how the random number module works in programming? I was curious about it myself, so I embarked on a journey to create a random number generator using time, different time zones, milliseconds, and some mathematical techniques. In this article, we'll explore the inner workings of randomness and build our own time-based random number generator.

Understanding Randomness:

Randomness is a fundamental concept in computer science and statistics. It allows us to introduce unpredictability into our programs and simulations. Most programming languages provide built-in random number generators that are based on various algorithms. However, we'll take a different approach by leveraging time and time zones to create our own random number generator.

Setting Up the Environment:

To follow along, clone the GitHub repository containing the code for our time-based random number generator: GitHub Repository. This repository includes a Python script that utilizes the datetime module to generate random numbers.

Working with Time Zones:

Time zones play a crucial role in our random number generator. By considering different time zones, we introduce additional complexity and increase the randomness of our generated numbers. The script in the repository Utilizes pytz module for a list of time zones from which we can choose. Experimenting with different time zones will yield varied and unique results.

Utilizing Milliseconds:

To add an extra layer of randomness, we will incorporate milliseconds into our calculations. The datetime module in Python allows us to obtain the current time, including milliseconds. By using this information, we can further enhance the randomness of our generated numbers.

Mathematical Manipulation:

Once we have the current time and milliseconds, we can perform mathematical operations on them to generate random numbers. By combining addition, multiplication, and modulo operations, we can create a formula that produces a diverse range of random outputs.

Finalizing the Random Number Generator:

The script in the GitHub repository demonstrates how to implement the time-based random number generator. It utilizes a simple algorithm that combines various factors such as time zones, milliseconds, and mathematical manipulation. Feel free to experiment with the code, adjust the formula, and add your own enhancements to suit your needs.

import datetime
import pytz  # Required library for time zone support

def randomnum(time_zone):
    # Getting the current time in the specified time zone
    time_now = datetime.datetime.now(pytz.timezone(time_zone))

    # Getting time in terms of microseconds
    random_seed = time_now.microsecond

    # An equation which returns a number between 0 and 10
    seed = random_seed * 8 % 11

    # Making random number somewhat unpredictable
    random_micro_secs = []
    for i in range(seed):
        random_micro_secs.append(time_now.second**seed)

    seed_2 = sum(random_micro_secs)

    # Generating the final random number
    truly_random_num = (seed_2 * 8 % 11)

    return truly_random_num

# Example usage
time_zone = 'America/New_York'  # Specify the desired time zone
random_number = randomnum(time_zone)
print(random_number)

Enter fullscreen mode Exit fullscreen mode

above block of code can generate random numbers between 0 to 10 only !!!

Conclusion:

Understanding how random number generators work is a fascinating endeavor. In this article, we explored the concept of randomness and created a time-based random number generator using time, different time zones, milliseconds, and mathematical manipulation. By leveraging the datetime module in Python, we harnessed the power of time to generate unique and unpredictable random numbers.

Remember, while this time-based approach can be a fun and educational exercise, it is not suitable for security-critical applications where true randomness is required. Cryptographically secure random number generators, backed by strong algorithms, are essential for such scenarios. Nonetheless, exploring alternative methods of generating random numbers can expand our understanding of the underlying principles and spur creativity in our coding endeavors.

I encourage you to delve into the code provided in the GitHub repository, modify it to your liking, and discover the nuances of randomness. Happy coding and may your endeavors be filled with intriguing and unpredictable outcomes!

Top comments (4)

Collapse
 
moopet profile image
Ben Sinclair

What you're doing is using the time as a source of entropy, which is great, but this only uses second and microsecond, and everything built on that afterwards is purely deterministic.

By that I mean, if the number going in is x, the number coming out will always be y. I don't think it's any more random than using the microsecond in the first place.

And I think you have a mistake in your maths - your % 11 will result in a value between 0 and 10, not between 1 and 10.

random_number = (datetime.datetime.now().microsecond % 10) + 1
Enter fullscreen mode Exit fullscreen mode
Collapse
 
coderatul profile image
Atul Kushwaha

Thanks for your analysis,

  • This was Just an Idea that I had, It's just a sudo random generator program to play around
  • and yes it would be b/w 0 to 10, I made a mistake
Collapse
 
sloan profile image
Sloan the DEV Moderator

Hi! #discuss posts should be questions designed to elicit community responses. Since this is more of a blog post than a question, please consider removing the #discuss tag. Thanks!

Collapse
 
coderatul profile image
Atul Kushwaha

Sure thank for correcting me I'll take care next time !