Compare commits
10 Commits
8f80ecfc49
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f20a7f0c34 | ||
|
|
ca9de4592f | ||
|
|
1f891c7d1f | ||
|
|
308c795cbe | ||
|
|
a72a20dd21 | ||
|
|
94afbe5053 | ||
|
|
97b07fa61a | ||
|
|
1fa5db7a04 | ||
|
|
2bea19ac07 | ||
|
|
116e77421d |
100
app.py
100
app.py
@@ -1,41 +1,89 @@
|
||||
from flask import Flask, render_template, request
|
||||
import random
|
||||
from flask import Flask, render_template, request, session
|
||||
import secrets
|
||||
import os
|
||||
import time
|
||||
import requests
|
||||
|
||||
app = Flask(__name__)
|
||||
app.secret_key = 'your_secret_key' # Secret key for session management
|
||||
|
||||
# Function to generate random seed using system entropy
|
||||
def generate_seed_from_entropy():
|
||||
seed = int((time.time() * 1000) % (2**32 - 1)) + os.getpid() + random.randint(0, 2**16 - 1)
|
||||
return seed
|
||||
# Function to combine secrets module and /dev/urandom for stronger randomness
|
||||
def generate_secure_seed():
|
||||
# Generate a random value using secrets and urandom
|
||||
urandom_value = int.from_bytes(os.urandom(8), 'big')
|
||||
secure_value = secrets.randbits(64)
|
||||
combined_seed = urandom_value ^ secure_value # Combine randomness using XOR
|
||||
return combined_seed
|
||||
|
||||
# Function to generate random numbers based on lottery rules
|
||||
def generate_lottery_numbers(game_type):
|
||||
seed = generate_seed_from_entropy()
|
||||
random.seed(seed)
|
||||
# Function to fetch random numbers from Random.org API
|
||||
def fetch_random_org_numbers(count, min_value, max_value):
|
||||
try:
|
||||
url = "https://www.random.org/integers/"
|
||||
params = {
|
||||
'num': count,
|
||||
'min': min_value,
|
||||
'max': max_value,
|
||||
'col': 1,
|
||||
'base': 10,
|
||||
'format': 'plain',
|
||||
'rnd': 'new'
|
||||
}
|
||||
response = requests.get(url, params=params)
|
||||
if response.status_code == 200:
|
||||
numbers = [int(num) for num in response.text.strip().split()]
|
||||
return sorted(numbers)
|
||||
except Exception as e:
|
||||
print(f"Error fetching from Random.org: {e}")
|
||||
return None
|
||||
|
||||
if game_type == 'euromillions':
|
||||
numbers = sorted(random.sample(range(1, 51), 5))
|
||||
lucky_stars = sorted(random.sample(range(1, 13), 2))
|
||||
return {'numbers': numbers, 'lucky_stars': lucky_stars}
|
||||
elif game_type == 'lotto':
|
||||
numbers = sorted(random.sample(range(1, 48), 6))
|
||||
return {'numbers': numbers}
|
||||
elif game_type == 'eurodreams':
|
||||
numbers = sorted(random.sample(range(1, 41), 6))
|
||||
dream_number = random.randint(1, 5)
|
||||
return {'numbers': numbers, 'dream_number': dream_number}
|
||||
else:
|
||||
return {'error': 'Invalid game type'}
|
||||
# Function to generate lottery numbers based on rules
|
||||
def generate_lottery_numbers(game_type, lines):
|
||||
results = []
|
||||
random_org_failure = False
|
||||
|
||||
for _ in range(lines):
|
||||
if game_type == 'euromillions':
|
||||
numbers = fetch_random_org_numbers(5, 1, 50)
|
||||
if numbers is None:
|
||||
random_org_failure = True
|
||||
numbers = sorted(secrets.SystemRandom().sample(range(1, 51), 5))
|
||||
lucky_stars = fetch_random_org_numbers(2, 1, 12)
|
||||
if lucky_stars is None:
|
||||
random_org_failure = True
|
||||
lucky_stars = sorted(secrets.SystemRandom().sample(range(1, 13), 2))
|
||||
results.append({'numbers': numbers, 'lucky_stars': lucky_stars})
|
||||
elif game_type == 'lotto':
|
||||
numbers = fetch_random_org_numbers(6, 1, 47)
|
||||
if numbers is None:
|
||||
random_org_failure = True
|
||||
numbers = sorted(secrets.SystemRandom().sample(range(1, 48), 6))
|
||||
results.append({'numbers': numbers})
|
||||
elif game_type == 'eurodreams':
|
||||
numbers = fetch_random_org_numbers(6, 1, 40)
|
||||
if numbers is None:
|
||||
random_org_failure = True
|
||||
numbers = sorted(secrets.SystemRandom().sample(range(1, 41), 6))
|
||||
dream_number = fetch_random_org_numbers(1, 1, 5)
|
||||
dream_number = dream_number[0] if dream_number else secrets.SystemRandom().randint(1, 5)
|
||||
results.append({'numbers': numbers, 'dream_number': dream_number})
|
||||
else:
|
||||
return {'error': 'Invalid game type'}
|
||||
return results, random_org_failure
|
||||
|
||||
@app.route('/', methods=['GET', 'POST'])
|
||||
def index():
|
||||
result = None
|
||||
random_org_failed = False
|
||||
game_type = session.get('game_type', 'euromillions') # Default to EuroMillions
|
||||
lines = session.get('lines', 1) # Default to 1 line
|
||||
|
||||
if request.method == 'POST':
|
||||
game_type = request.form.get('game_type')
|
||||
result = generate_lottery_numbers(game_type)
|
||||
return render_template('index.html', result=result)
|
||||
lines = int(request.form.get('lines', 1))
|
||||
session['game_type'] = game_type
|
||||
session['lines'] = lines
|
||||
result, random_org_failed = generate_lottery_numbers(game_type, lines)
|
||||
|
||||
return render_template('index.html', result=result, game_type=game_type, lines=lines, random_org_failed=random_org_failed)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True)
|
||||
|
||||
41
app.py.OLD
Normal file
41
app.py.OLD
Normal file
@@ -0,0 +1,41 @@
|
||||
from flask import Flask, render_template, request
|
||||
import random
|
||||
import os
|
||||
import time
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# Function to generate random seed using system entropy
|
||||
def generate_seed_from_entropy():
|
||||
seed = int((time.time() * 1000) % (2**32 - 1)) + os.getpid() + random.randint(0, 2**16 - 1)
|
||||
return seed
|
||||
|
||||
# Function to generate random numbers based on lottery rules
|
||||
def generate_lottery_numbers(game_type):
|
||||
seed = generate_seed_from_entropy()
|
||||
random.seed(seed)
|
||||
|
||||
if game_type == 'euromillions':
|
||||
numbers = sorted(random.sample(range(1, 51), 5))
|
||||
lucky_stars = sorted(random.sample(range(1, 13), 2))
|
||||
return {'numbers': numbers, 'lucky_stars': lucky_stars}
|
||||
elif game_type == 'lotto':
|
||||
numbers = sorted(random.sample(range(1, 48), 6))
|
||||
return {'numbers': numbers}
|
||||
elif game_type == 'eurodreams':
|
||||
numbers = sorted(random.sample(range(1, 41), 6))
|
||||
dream_number = random.randint(1, 5)
|
||||
return {'numbers': numbers, 'dream_number': dream_number}
|
||||
else:
|
||||
return {'error': 'Invalid game type'}
|
||||
|
||||
@app.route('/', methods=['GET', 'POST'])
|
||||
def index():
|
||||
result = None
|
||||
if request.method == 'POST':
|
||||
game_type = request.form.get('game_type')
|
||||
result = generate_lottery_numbers(game_type)
|
||||
return render_template('index.html', result=result)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True)
|
||||
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
Flask==3.0.0
|
||||
66
static/style.css
Normal file
66
static/style.css
Normal file
@@ -0,0 +1,66 @@
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #f4f4f9;
|
||||
color: #333;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin: 50px auto;
|
||||
max-width: 600px;
|
||||
padding: 20px;
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #0073e6;
|
||||
}
|
||||
|
||||
form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
label {
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
select, input, button {
|
||||
margin-top: 10px;
|
||||
padding: 10px;
|
||||
width: 80%;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
button {
|
||||
background-color: #0073e6;
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #005bb5;
|
||||
}
|
||||
|
||||
.results {
|
||||
margin-top: 20px;
|
||||
padding: 15px;
|
||||
background-color: #f9f9f9;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.line {
|
||||
margin: 5px 0;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.error {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
@@ -4,31 +4,43 @@
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<title>Lottery Number Generator</title>
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Lottery Number Generator</h1>
|
||||
<form method="POST">
|
||||
<label for="game_type">Select Game:</label>
|
||||
<select name="game_type" id="game_type" required>
|
||||
<option value="euromillions">EuroMillions</option>
|
||||
<option value="euromillions_plus">EuroMillions Plus</option>
|
||||
<option value="lotto">Lotto</option>
|
||||
<option value="lotto_plus">Lotto Plus</option>
|
||||
<option value="eurodreams">EuroDreams</option>
|
||||
</select>
|
||||
<br><br>
|
||||
<button type="submit">Generate Numbers</button>
|
||||
</form>
|
||||
|
||||
{% if result %}
|
||||
<h2>Generated Numbers:</h2>
|
||||
<p>Numbers: {{ result.numbers }}</p>
|
||||
{% if result.lucky_stars %}
|
||||
<p>Lucky Stars: {{ result.lucky_stars }}</p>
|
||||
{% endif %}
|
||||
{% if result.plus %}
|
||||
<p>Plus Option: Yes</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<div class="container">
|
||||
<h1>Lottery Number Generator</h1>
|
||||
<form method="POST">
|
||||
<!-- Retain selected game_type -->
|
||||
<label for="game_type">Select Game:</label>
|
||||
<select name="game_type" id="game_type" required>
|
||||
<option value="euromillions" {% if game_type == 'euromillions' %}selected{% endif %}>EuroMillions</option>
|
||||
<option value="lotto" {% if game_type == 'lotto' %}selected{% endif %}>Lotto</option>
|
||||
<option value="eurodreams" {% if game_type == 'eurodreams' %}selected{% endif %}>EuroDreams</option>
|
||||
</select>
|
||||
|
||||
<!-- Retain selected lines -->
|
||||
<label for="lines">Number of Lines:</label>
|
||||
<input type="number" name="lines" id="lines" min="1" max="10" value="{{ lines }}" required>
|
||||
|
||||
<button type="submit">Generate Numbers</button>
|
||||
</form>
|
||||
|
||||
{% if result %}
|
||||
<div class="results">
|
||||
<h2>Generated Numbers:</h2>
|
||||
{% for line in result %}
|
||||
<div class="line">
|
||||
Numbers: {{ line.numbers }}
|
||||
{% if line.lucky_stars %}
|
||||
| Lucky Stars: {{ line.lucky_stars }}
|
||||
{% endif %}
|
||||
{% if line.dream_number %}
|
||||
| Dream Number: {{ line.dream_number }}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user