鉴于前两个是学生开始学习的年份,我想为个人资料创建唯一的5位数字(id_number)。例如,2019年入学的学生的ID必须在前两个中以19开头,其余三个数字为随机数。感谢所有解决方案
答案 0 :(得分:0)
假设id_number
是唯一的(在模型字段中为unique=True
),则只需执行类似的操作
import random
from django.utils.timezone import now
# ...
year_part = now().year % 100
while True:
id_number = '%02d%03d' % (year_part, random.randint(0, 999))
if not Profile.objects.filter(id_number=id_number).exists():
break
# assign the id_number to a profile...
请注意,当您在不幸的(1/999)情况下尝试IntegrityError
模型时,这两个可能会因.save()
而崩溃,两个并发请求都生成相同的id_number ,在这种情况下,您只需重试即可。
答案 1 :(得分:0)
import random
number=int('{}{}'.format(int(str(year)[-2:]),random.randint(100, 999)))
答案 2 :(得分:0)
根据您要使用的位置,尝试以下操作
import random
import datetime
def generate_id(year=None, digits=5):
if not year:
year=datetime.datetime.now().year
year = str(year)
digits = int(digits)
data = str(random.randint(0,999)) + year[-2:]
return data.zfill(digits)[-digits:]
请确保您输入的数字是5位
答案 3 :(得分:0)
import randint from random
def random_with_N_digits(n): # generate OTP
range_start = 10**(n - 1)
range_end = (10**n) - 1
return randint(range_start, range_end)