更改:之前写的还是有漏洞的,之前写的默认后五位全是数字,但是实际上不是这样的,作者百度了相关标准,如下:
(一)前4位必须有1位且只能有1位是英文字母(但I和O不能使用),英文字母位置可以在4位中自由选择,其它3位是数字。另外,在选择字母时,郊区号牌的车辆所选字母只能在"N"到"Z"中选择,因为"A"至"M"已经在以前的号牌系统中使用过。
(二)第5位必须是数字,不能是字母。
因此作者对代码进行了修改,利用正则表达式完成筛选
(三)英文字母不能有I,O,具体原因自行百度
改正代码后的原文如下
之前做课设的时候舍友遇到了需要生成500w量级车牌号的问题,于是我便写了一个随机生成车牌号的程序,希望各位采纳。
注:Python实现
import random
import re
def chepaihao(len=6):
char0='京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽赣粤青藏川宁琼'
char1='ABCDEFGHJKLMNPQRSTUVWXYZ'#车牌号中没有I和O,可自行百度
char2='1234567890ABCDEFGHJKLMNPQRSTUVWXYZ'
char3='1234567890'
len0=len(char0)-1
len1 = len(char1) - 1
len2 = len(char2) - 1
len3 = len(char3) - 1
while True:
code = ''
index0 = random.randint(1,len0 )
index1 = random.randint(1, len1)
code += char0[index0]
code += char1[index1]
code+=' '
for i in range(1, 5):
index2 = random.randint(1, len2)
code += char2[index2]
index3=random.randint(1,len3)
code+=char3[index3]
test=re.match('^.\w.[A-Z]\d{4}$|^.\w.\d[A-Z]\d{3}$|^.\w.\d{2}[A-Z]\d{2}$|^.\w.\d{3}[A-Z]\d$|^.\w.\d{5}$',code)
if test:
print(code)
if __name__=='__main__':
chepaihao(len)
部分运行结果如下
如果对正则表达式存在疑惑,不知道这个东西应该怎么使用的话可以移步我的另一篇文章《一篇文章学会正则表达式》
其实筛选的过程遍历也行,不过正则表达式显得有逼格一点。