1. 成品展示🚗🚀🛫
运行🚀🚀🚀:
1.在PyCharm中运行《企业编码生成系统》即可进入如图1所示的系统主界面。
2.在该界面中可以选择要使用功能对应的菜单进行不同的操作。
3.在选择功能菜单时,只需要输入对应的数字即可。
作者注释🍕🍔🍟:
1.博客只展示大部分(90%)核心代码及其使用说明
2.本博客适用于python基础学者学习使用(内含各种用于解决实际生活中的问题的库)
3.源码我会放在文章末尾的链接哦~~
关于博客,有不懂的同学,欢迎在评论区评论(接受一切质疑与批评),评论都会一一回复(作者考研狗,回复的比较慢,请见谅...)
2. 编码🍕🍔🍟
2.1 新建虚拟环境💖💖
# 打开cmd
1. 安装virtualenv (windows操作系统)
pip install virtualenv virtualenvwrapper-win
2. workon查看虚拟环境
workon
3. mkvirtualenv创建新的虚拟环境
mkvirtualenv pro_env
4. rmvirtualenv删除虚拟环境
rmvirtualenv pro_env
5. 进入虚拟环境
workon flask1env
6. 打开Pycharm专业版,创建项目并配置好虚拟环境pro_env
2.2 导包💖💖
二维码:
pip install qrcode
pip install Image
pip install pyStrich
2.3 企业编码管理系统主菜单💖💖
# 企业编码管理系统主菜单
def mainmenu():
# os.system("clear")
print("""\033[1;35m
****************************************************************
企业编码生成系统
****************************************************************
1.生成6位数字防伪编码 (213563型)
2.生成9位系列产品数字防伪编码(879-335439型)
3.生成25位混合产品序列号(B2R12-N7TE8-9IET2-FE35O-DW2K4型)
4.生成含数据分析功能的防伪编码(5A61M0583D2)
5.智能批量生成带数据分析功能的防伪码
6.后续补加生成防伪码(5A61M0583D2)
7.EAN-13条形码批量生成
8.二维码批量输出
9.企业粉丝防伪码抽奖
0.退出系统
================================================================
说明:通过数字键选择菜单
================================================================
\033[0m""")
2.4 生成注册码💖💖
# 实现屏幕输出和文件输出编码信息,参数num_choice设置输出的文件名称
def scode1(num_choice):
# 调用inputbox函数对输入数据进行非空、输入合法性判断
incount = inputbox("\033[1;32m 请输入您要生成验证码的数量: \33[0m", 1, 0)
while int(incount) == 0: # 如果输入为字母或数字0,则要求重新输入
incount = inputbox("\033[1;32m 请输入您要生成验证码的数量: \33[0m", 1, 0)
randstr.clear() # 清空保存批量注册码信息的变量randstr
for j in range(int(incount)): # 根据输入的验证码数量循环批量生成注册码
randfir = '' # 设置存储单条注册码的变量为空
for i in range(6): # 循环生成单条注册码
randfir += random.choice(number) # 产生数字随机因子
randfir = randfir + "\n" # 在单条注册码后面添加转义换行字符“\n”,使验证码单条列显示
randstr.append(randfir) # 将单条注册码添加到保存批量验证码的变量randstr
# 调用函数wfile(),实现生成的防伪码屏幕输出和文件输出
wfile(randstr,"scode" + str(num_choice) + ".txt", "", "已生成6位防伪码共计:","codepath")
2.5 9位系列产品数字防伪编码💖💖
def scode2(num_choice):
ordstart = inputbox("\033[1;32m 请输入系列产品的数字起始号(3位): \33[0m", 3, 3)
while int(ordstart) == 0: # 如果输入非法(符号、字母或者数字0都认为是非法输入),重新输入
ordstart = inputbox("\033[1;32m 请输入系列产品的数字起始号(3位): \33[0m", 3, 3)
ordcount = inputbox("\033[1;32m 请输入产品系列的数量:", 1, 0)
# 如果输入的产品系列数量小于1或者大于9999,,则要求重新输入
while int(ordcount) < 1 or int(ordcount) > 9999:
ordcount = inputbox("\033[1;32m 请输入产品系列的数量:", 1, 0)
incount = inputbox("\033[1;32m 请输入要生成的每个系列产品的防伪码数量:\33[0m", 1, 0)
while int(incount) == 0: # 如果输入为字母或数字0,则要求重新输入
incount = inputbox("\033[1;32m 请输入您要生成验证码的数量:\33[0m", 1, 0)
randstr.clear() # 清空保存批量注册码信息的变量randstr
for i in range(int(ordcount)): # 分类产品编号
for j in range(int(incount)): # 产品防伪码编号
randfir = ''
for k in range(6): # 生成一个不包含类别的产品防伪码
randfir = randfir + random.choice(number) # 每次生成一个随机因子
randstr.append(str(int(ordstart) + i) + randfir + "\n") # 将生成的单条防伪码添加到防伪码列表
# 调用函数wfile(),实现生成的防伪码屏幕输出和文件输出
wfile(randstr, "scode" + str(num_choice) + ".txt", "", "已生成9位系列产品防伪码共计:","codepath")
2.6 25位混合产品序列号💖💖
def scode3(num_choice):
# 输入要生成的防伪码数量
incount = inputbox("\033[1;32m 请输入要生成的25位混合产品序列号数量:\33[0m", 1, 0)
while int(incount) == 0: # 如果输入非法(符号、字母或者数字0都认为是非法输入),重新输入
incount = inputbox("\033[1;32m 请输入要生成的25位混合产品序列号数量:\33[0m", 1, 0)
randstr.clear() # 清空保存批量注册码信息的变量randstr
for j in range(int(incount)): # 按输入数量生成防伪码
strone = '' # 保存生成的单条防伪码,不带横线“-”,循环时清空
for i in range(25):
strone = strone + random.choice(letter) # 每次产生一个随机因子,也就是每次产生单条防伪码的一位
# 将生成的防伪码每隔5位添加横线“-”
strtwo = strone[:5] + "-" + strone[5:10] + "-" + strone[10:15] + "-" + strone[15:20] + "-" + strone[20:25] + "\n"
randstr.append(strtwo) # 添加防伪码到防伪码列表
# 调用函数wfile(),实现生成的防伪码屏幕输出和文件输出
wfile(randstr, "scode" + str(num_choice) + ".txt", "", "已生成25混合防伪序列码共计:","codepath")
2.7 含数据分析功能防伪编码💖💖
scode4()函数
# 生成含数据分析功能防伪编码函数,参数num_choice设置输出的文件名称
def scode4(num_choice):
intype = inputbox("\033[1;32m 请输入数据分析编号(3位字母):\33[0m", 2, 3)
# 验证输入是否是三个字母,所以要判断输入是否是字母和输入长度是否为3
while not str.isalpha(intype) or len(intype) != 3:
intype = inputbox("\033[1;32m 请输入数据分析编号(3位字母):\33[0m", 2, 3)
incount = inputbox("\033[1;32m 请输入要生成的带数据分析功能的验证码数量:\33[0m", 1, 0) #
# 验证输入是否是大于零的整数,判断输入转换为整数值时是否大于零
while int(incount) == 0: # 如果转换为整数时为零,则要求重新输入
incount = inputbox("\033[1;32m 请输入要生成的带数据分析功能的验证码数量:\33[0m", 1, 0) #
ffcode(incount,intype,"",num_choice) # 调用 ffcode函数生成注册信息
ffcode()
# 生成含数据分析功能防伪编码函数,参数scount为要生成的防伪码数量,typestr为数据分析字符
# 参数ismessage在输出完成时是否显示提示信息,为“no”不显示,为其他值显示;参数num_choice设置输出的文件名称
def ffcode(scount, typestr,ismessage, num_choice):
randstr.clear() # 清空保存批量注册码信息的变量randstr
# 按数量生成含数据分析功能注册码
for j in range(int(scount)):
strpro = typestr[0].upper() # 取得三个字母中的第一个字母,并转为大写,区域分析码
strtype = typestr[1].upper() # 取得三个字母中的第二个字母,并转为大写,颜色分析码
strclass = typestr[2].upper() # 取得三个字母中的第三个字母,并转为大写,版本分析码
randfir = random.sample(number, 3) # 随机抽取防伪码中的三个位置,不分先后
randsec = sorted(randfir) # 对抽取的位置进行排序并存储给randsec变量,以便按顺序排列三个字母的位置
letterone = "" # 清空存储单条防伪码的变量letterone
for i in range(9): # 生成9位的数字防伪码
letterone = letterone + random.choice(number)
# 将三个字母按randsec变量中存储的位置值添加到数字防伪码中,并放到sim变量中
sim = str(letterone[0:int(randsec[0])]) + strpro + str(
letterone[int(randsec[0]):int(randsec[1])]) + strtype + str(
letterone[int(randsec[1]):int(randsec[2])]) + strclass + str(letterone[int(randsec[2]):9]) + "\n"
randstr.append(sim) # 将组合生成的新防伪码添加到randstr变量
# 调用wfile()函数,实现生成的防伪码屏幕输出和文件输出
wfile(randstr, typestr + "scode" + str(num_choice) + ".txt", ismessage, "生成含数据分析防伪码共计:","codepath")
2.8 含数据分析功能防伪编码函数💖💖
# 生成含数据分析功能防伪编码函数,参数num_choice设置输出的文件名称
def scode5(num_choice):
default_dir = r"mrsoft.mri" # 设置默认打开的文件名称
# 打开文件选择对话框,指定打开的文件名称为"mrsoft.mri" ,扩展名为“mri”,可以使用记事本打开和编辑
file_path = tkinter.filedialog.askopenfilename(filetypes=[("Text file","*.mri")],title=u"请选择自动防伪码智能批处理文件:",
initialdir=(os.path.expanduser(default_dir)))
codelist = openfile(file_path) # 读取从文件选择对话框选中的文件
print("前:",codelist)
codelist = codelist.split("\n") # 把读取的信息内容添加回车,以便列输出显示
print("后:",codelist)
for item in codelist: # 按读取的信息循环生成防伪码
codea = item.split(",")[0] # 每一行信息中用 ","分割,","前面的信息存储防伪码标准信息
codeb = item.split(",")[1] # 每一行信息中用 ","分割,","后面的信息存储防伪码生成的数量
ffcode(codeb, codea,"no" ,num_choice) # 调用ffcode函数批量生成同一标识信息的防伪码
2.9 后续补加生成防伪码函数,防伪码格式为带数据分析功能注册码💖💖
# 后续补加生成防伪码函数,防伪码格式为带数据分析功能注册码
def scode6(num_choice):
default_dir = r"c:\scode5.txt" # 设置默认打开的文件名称
# 按默认的文件名称打开文件选择对话框,用于打开已经存在的防伪码文件
file_path = tkinter.filedialog.askopenfilename(title=u"请选择已经生成的防伪码文件",initialdir=(os.path.expanduser(default_dir)))
codelist = openfile(file_path) # 读取从文件选择对话框选中的文件
codelist = codelist.split("\n") # 把读取的信息内容添加回车,以便列输出显示
codelist.remove("") # 删除列表中的空行
strset = codelist[0] # 读取一行数据,以便获取原验证码的字母标志信息
remove_digits = strset.maketrans("", "", digits) # 用maketrans方法创建删除数字的字符映射转换表
res_letter = strset.translate(remove_digits) # 根据字符映射转换表删除该条防伪码中的数字,获取字母标识信息
nres_letter = list(res_letter) # 把信息用列表变量nres_letter存储
strpro = nres_letter[0] # 从列表变量中取得第一个字母,即区域分析码
strtype = nres_letter[1] # 从列表变量中取得第二个字母,即色彩分析码
strclass = nres_letter[2] # 从列表变量中取得第三个字母,即版次分析码
# 去除信息中的括号和引号
nres_letter = strpro.replace(''''','').replace(''''', '') + strtype.replace(
''''','').replace(''''', '') + strclass.replace(''''','').replace(''''', '')
print("sssssssssss",nres_letter)
card = set(codelist) # 将原有防伪码放到集合变量card中
# 利用tkinter的messagebox提示用户之前生成的防伪码数量
tkinter.messagebox.showinfo("提示", "之前的防伪码共计:" + str(len(card)))
root.withdraw() # 关闭提示信息框
incount = inputbox("请输入补充验证码生成的数量:", 1, 0) # 让用户输入新补充生成的防伪码数量
# 最大值按输入生成数量的2倍数量生成新防伪码,防止新生成防伪码与原有防伪码重复造成新生成的防伪码数量不够,
for j in range(int(incount) * 2):
randfir = random.sample(number, 3) # 随机产生3位不重复的数字
randsec = sorted(randfir) # 对产生的数字排序
addcount = len(card) # 记录集合中防伪码的总数量
strone = "" # 清空存储单条防伪码的变量strone
for i in range(9): # 生成9位的数字防伪码
strone = strone + random.choice(number)
# 将三个字母按randsec变量中存储的位置值添加到数字防伪码中,并放到sim变量中
sim = str(strone[0:int(randsec[0])]) + strpro + str(
strone[int(randsec[0]):int(randsec[1])]) + strtype + str(
strone[int(randsec[1]):int(randsec[2])]) + strclass + str(strone[int(randsec[2]):9]) + "\n"
card.add(sim) # 添加新生成的防伪码到集合
# 如果添加到集合,证明生成的防伪码与原有的防伪码没有产生重复
if len(card) > addcount:
randstr.append(sim) # 添加新生成的防伪码到新防伪码列表
addcount = len(card) # 记录最添加新生成防伪码集合的防伪码数量
if len(randstr) >= int(incount): # 如果新防伪码列表中的防伪码数量达到输入的防伪码数量
print(len(randstr)) # 输出已生成防伪码的数量
break # 退出循环
# 调用函数wfile()函数,实现生成的防伪码屏幕输出和文件输出
wfile(randstr, nres_letter + "ncode" + str(choice) + ".txt", nres_letter, "生成后补防伪码共计:","codeadd")
# tkinter.messagebox.showinfo("提示", "已生成补充防伪码共:" + str(len(randstr))) # 提示
# root.withdraw()
2.10 条形码EAN13批量生成函数💖💖
def scode7(num_choice):
mainid = inputbox("\033[1;32m 请输入EN13的国家代码(3位) : \33[0m", 3, 3) # 输入3位国家代码
compid = inputbox("\033[1;32m 请输入EAN13的企业代码(4位): \33[0m", 3, 4) # 输入4位企业代码
incount = inputbox("\033[1;32m 请输入要生成的条形码数量: \33[0m", 1, 0) # 输入要生成的条形码数量
while int(incount) == 0: # 输入信息转为整数后等于0,重新输入
incount = inputbox("\033[1;32m 请输入要生成的条形码数量:\33[0m", 1, 0)
mkdir("barcode") # 判断保存条形码的文件夹是否存在,不存在,则创建该文件夹
for j in range(int(incount)): # 批量生成条形码
strone = '' # 清空存储单条条形码的变量
for i in range(5): # 生成条形码的6位(除国家代码、企业代码和校验位之外的6位)数字
strone = strone + str(random.choice(number))
barcode = mainid +compid +strone # 把国家代码、企业代码和新生成的随机码进行组合
# 计算条形码的校验位
evensum = int(barcode[1]) + int(barcode[3]) + int(barcode[5]) + int(barcode[7]) + int(barcode[9]) + int(barcode[11]) # 偶数位
oddsum = int(barcode[0]) + int(barcode[2]) + int(barcode[4]) + int(barcode[6]) + int(barcode[8]) + int(barcode[10])
checkbit = int((10 - (evensum * 3 + oddsum) % 10) % 10)
barcode = barcode+str(checkbit) # 组成完整的EAN13条形码的13位数字
print(barcode)
encoder = EAN13Encoder(barcode) # 调用EAN13Encoder生成条形码
encoder.save("barcode\\" + barcode + ".png") # 保存条形码信息图片到文件
2.11 固定的12位二维码,读者可以根据实际需要修改成按输入位数进行生成的函数💖💖
# 本函数生成固定的12位二维码,读者可以根据实际需要修改成按输入位数进行生成的函数
def scode8(num_choice):
# 输入要生成的二维码数量
incount = inputbox("\033[1;32m 请输入要生成的12位数字二维码数量:\33[0m", 1, 0)
while int(incount) == 0: # 如果输入不是大于0的数字,重新输入
incount = inputbox("\033[1;32m 请输入要生成的12位数字二维码数量:\33[0m", 1, 0)
mkdir("qrcode") # 判断保存二维码的文件夹是否存在,不存在,则创建该文件夹
for j in range(int(incount)): # 批量生成二维码
strone = '' # 清空存储单条二维码的变量
for i in range(12): # 生成单条二维码数字
strone = strone + str(random.choice(number))
encoder =qrcode.make(strone) # 生成二维码
encoder.save("qrcode\\" + strone + ".png") # 保存二维码图片到文件
2.12 抽奖函数💖💖
# 抽奖函数
def scode9(num_choice):
default_dir = r"lottery.ini" # 设置默认打开文件为开发路径下的"lottery.ini"
# 选择包含用户抽奖信息票号的文件,扩展名为“*.ini”
file_path = tkinter.filedialog.askopenfilename(filetypes=[("Ini file","*.ini")],title=u"请选择包含抽奖号码的抽奖文件:",initialdir=(os.path.expanduser(default_dir)))
codelist = openfile(file_path) # 调用 openfile()函数读取刚打开的抽奖文件
codelist = codelist.split("\n") # 通过回行转义符把抽奖信息分割成抽奖数列
incount = inputbox("\033[1;32m 请输入要生成的中奖数量: \33[0m", 1, 0) # 要求用户输入中(抽)奖数量
while int(incount) == 0 or len(codelist)< int(incount): # 如果输入中(抽)奖数量等于0或超过抽奖数组数量,重新输入
incount = inputbox("\033[1;32m 请输入要生成的抽奖数量: \33[0m", 1, 0)
strone = random.sample(codelist, int(incount)) # 根据输入的中奖数量进行抽奖
print("\033[1;35m 抽奖信息名单发布: \33[0m")
for i in range(int(incount)): # 循环将抽奖数列的引号和中括号去掉
wdata = str(strone[i].replace('[', '')).replace(']', '') # 将抽奖数列的中括号去掉
wdata = wdata.replace(''''','').replace(''''', '') # 将抽奖数列的引号去掉
print("\033[1;32m" + wdata + "\33[0m") # 输出中奖信息
3. 操作步骤🀄🃏🎰:
3.1 生成6位数字防伪编码🌸🌸
1.当用户在主程序界面中输入数字“1”菜单项时,将进入“生成6位数字防伪编码 (213563型)”的功能执行任务。
2.此时要求输入生成防伪码的数量,可以根据需要输入生成防伪码的数量,如图所示。
3.按下<Enter>键,开始批量生成防伪码,生成后系统将提示用户生成了多少个注册码和生成文件的位置信息等,如图3所示。
4.单击“确定”按钮,关闭提示信息。在屏幕上可以看到生成的防伪码信息,如图4所示。
5.生成的文件在程序所在目录下的“codepath”文件夹下,名称为“scode1.txt”,如下图所示。
3.2 生成9位系列产品数字防伪编码🌸🌸
1.在主程序界面中输入数字“2”菜单项时,将进入“生成9位系列产品数字防伪编码”的功能执行。
2.在产品系列其实编码输入中输入511,在系列产品数量中输入3,在每个系列生成数量中输入2,如图所示,按下<Enter>键,开始生成防伪码。
3.生成后系统将提示用户生成防伪码信息。
3.3 生成25位混合产品序列号🌸🌸
1. 在主程序界面中输入数字“3”菜单项时,将进入“生成25位混合产品序列码”的功能执行。
2. 在输入要生成的数量中输入3,并且按下<Enter>键,将生成3个如图所示的25位防伪码。
3.4 生成含数据分析功能的防伪编码🌸🌸
1.在主程序界面中输入数字“4”菜单项时,将进入“生成含数据分析功能的防伪编码”的功能执行。
2.在输入要生成的带数据分析功能的验证码数量中输入2,并且按下<Enter>键;在输入数据分析编号(3位字母)中输入wjy,并按下<Enter>键,将生成2个如图9所示的25位防伪码。
3.5 智能批量生成带数据分析功能的防伪码🌸🌸
1.当用户在功能选择界面中输入数字“5”时,进入智能批量生成带数据分析功能的防伪码功能选项,
2.在弹出的对话框中,选择保存批量生成防伪码信息的文件(扩展名为.mri的文件,文件如图所示,其中前面的3位字母是数据分析码,后面的数值是防伪码的个数)
3.单击“打开”按钮,将批量生成防伪码信息,并把不同类别的防伪码文件保存在不同的文件中。
3.6 后续补加生成防伪码🌸🌸
1.在功能选择界面中输入数字“6”时,将进入补充防伪码生成功能选项。
2.首先在打开的对话框中选择已经生成的防伪码的文件(需要使用前4步中生成的防伪码文件)。
3.系统将自动分析已经生成的防伪码数量,并给出提示对话框,如图所示。
4.接下来要求用户输入补充防伪码的数量,根据要求的防伪码数量循环生成新防伪码。
5.完成后将提醒防伪码已经完成,并提示新生成的防伪码文件的保存位置。
3.7 EAN-13条形码批量生成🌸🌸
1.在功能选择界面中输入数字“7”时,将进入EAN-13条形码批量生成功能选项。
2.在请输入EN13的国家代码(3位)中输入571;在请输入EAN13的企业代码(4位)中输入5205;在请输入要生成的条形码数量中输入条形码的数量,这里输入3,并按下<Enter>键,将自动生成条形码,如图所示。
3.生成后的文件保存在项目根目录下的barcode目录中。
3.8 二维码批量输出🌸🌸
1.在功能选择界面中输入数字“8”时,将进入二维码批量输出功能选项。
2.在请输入要生成的12位数字二维码数量中输入二维码的数量,这里输入3,并按下<Enter>键,将自动生成二维码。
3.生成后的文件保存在项目根目录下的barcode目录中,效果如图所示。
3.9 企业粉丝防伪码抽奖🌸🌸
1.在功能选择界面中输入数字“9”时,将进入企业粉丝防伪码抽奖功能选项。
2.将弹出文件选择对话框,选择抽奖信息文件后,输入抽取中奖用户数量,并且按下<Enter>键,将显示抽取的中奖号码。
3.10 退出系统🌸🌸
在功能选择界面中输入数字“0”,并且按下<Enter>键即可退出系统,如图所示。
4. 项目源码🌻🌼
1. 本博客只展示项目底层逻辑的核心代码(90%),完整的源码在下边,希望各位同学,在执行此代码时,先看看这边博客的讲解,有助于理解python的基础语法
2. 此篇博客后续会继续更新改进,添加细节处讲解
(感兴趣的同学,还请先关注下,作者考研狗尽量及时更新哈)🎰🎰🎰
4. 关注我,一定能会python,学不会无所谓~~
5. 恳请大家在评论区点评(接受一切质疑,批评)🚀🚀
企业编码生成系统