欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

企业代码生成系统的 Python 实现

最编程 2024-05-06 20:17:41
...
#!/usr/bin/env python # -*- coding:utf-8 -*- import os, tkinter, random, string, time, qrcode from pystrich.ean13 import EAN13Encoder import tkinter.messagebox import tkinter.filedialog from tkinter import * from string import digits root = tkinter.Tk() # tkinter模块为python的标准图形界面接口。本代码的目的是建立根窗口 # 初始化数据 number = "1234567890" letter = "ABCDEFGHIGKLMNOPQRSTUVWXYZ1234567890" allis = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+" i = 0 randstr = [] fourth = [] fifth = [] randfir = "" randsec = "" randthr = "" str_one = "" strone = "" strtwo = "" nextcard = "" userput = "" nres_letter = "" # 验证输入是否非法 def input_validation(insel): if str.isdigit(insel): # if insel == 0: # print("\033[1;31;40m 输入非法,请重新输入!!!\033[0m") # return 0 # else: # return insel insel = int(insel) return insel else: print("\033[1;31;40m 输入非法,请重新输入!!!\033[0m") return 0 # 判断保存防伪码的文件夹是否存在,不存在则建立 def mkdir(path): isexists = os.path.exists(path) if not isexists: os.mkdir(path) # 读取文本文件,读取保存产品编号和生成数量的文件,以及用户选择的已生成的编码文件 def openfile(filename): f = open(filename) fllist = f.read() f.close() return fllist # 输入验证判断函数,根据参数判断输入的是哪种类型,是否合法, # showstr为input函数提供动态输入提示文字, # showorder提供验证方式,length提供要求输入数据的长度 def inputbox(showstr, showorder, length): instr = input(showstr) # 使用input函数要求用户输入信息,showstr为输入提示文字 if len(instr) != 0: # 根据输入数据的要求,分成三种验证方式验证,1:数字,不限位数;2:字母;3:数字且有位数要求 if showorder == 1: if str.isdigit(instr): if instr == "0": print("\033[1;31;40m 输入为零,请重新输入!!\033[0m") return "0" else: return instr # 将输入的数据传给函数返回值 else: print("\033[1;31;40m 输入为零,请重新输入!!\033[0m") return if showorder == 2:# 验证方式2 ,要求字母格式,且是三个字母 if str.isalpha(instr): if len(instr) != length:# 判断输入的是否为三个字母,如果不是,则要求重新输入,返回值为“0” print("\033[1;31;40m 必须输入" + str(length) + "个字母,请重新输入!!\033[0m") return "0" else:# 如果输入是三个字母,返回输入的字母 return instr else:# 如果输入不是字母 print("\033[1;31;40m 输入非法,请重新输入!!\033[0m") return "0" if showorder == 3: # 验证方式3 ,要求数字格式,且输入数字位数有要求 if str.isdigit(instr): if len(instr) != length: print("\033[1;31;40m 必须输入" + str(length) + "个数字,请重新输入!!\033[0m") return "0" else: # 输入数字满足要求,设置函数返回值为输入信息 return instr else: print("\033[1;31;40m 输入非法,请重新输入!!\033[0m") return "0" else: print("\033[1;31;40m 输入为空,请重新输入!!\033[0m") return "0" # 编码输出显示函数,通过屏幕输出和文件输出两种方式输出生成的防伪码信息 # sstr参数为输出防伪码数据, sfile为输出的文件名称 # typeis设置输出完成后是否通过信息框提示, smsg为信息提示框的提示文字, # datapath 保存防伪码的文件夹 def wfile(sstr, sfile, typeis, smsg, datapath): mkdir(datapath) # 创建文件夹 datafile = datapath + "\\" + sfile# 设置保存防伪码的文件(包含路径) file = open(datafile, 'w')# 打开保存防伪码的文件,如果文件不存在,则创建该文件 wrlist = sstr# 将防伪码信息赋值给wrlist pdata = ""# 清空变量pdata,pdata存储屏幕输出的防伪码信息 wdata = ""# 清空变量 wdata , wdata 存储保存到文本文件的防伪码信息 for i in range(len(wrlist)): wdata = str(wrlist[i].replace('[', '')).replace(']', '') wdata = wdata.replace("'", '').replace("'", '') file.write(str(wdata)) pdata = pdata + wdata file.close() print("\033[1;31m" + pdata + "\033[0m") if typeis != "no": # 显示“输出完成”的信息提示框。显示信息包含方位信息码的保存路径 tkinter.messagebox.showinfo("提示", smsg + str(len(randstr)) + "\n 防伪码文件存放位置:" + datafile) root.withdraw() # 关闭辅助窗口 # 生成6位数字防伪码 def scode1(schoice): incount = inputbox("\033[1;32m 请输入您要生成防伪码的数量:\33[0m", 1, 0) while int(incount) == 0: incount = inputbox("\033[1;32m 请输入您要生成防伪码的数量:\33[0m", 1, 0) randstr.clear() for j in range(int(incount)): randfir = '' for i in range(6): randfir = randfir + random.choice(number) randfir = randfir + "\n" randstr.append(randfir) wfile(randstr, "scode" + str(schoice) + ".txt", "", "已生成6位防伪码共计:", "codepath") # 生成9位系列产品数字防伪编码 def scode2(schoice): ordstart = inputbox("\033[1;32m 请输入系列产品的数字起始号(3位):\33[0m", 3, 3) while int(ordstart) == 0: ordstart = inputbox("\033[1;32m 请输入系列产品的数字起始号(3位):\33[0m", 1, 0) ordcount = inputbox("\033[1;32m 请输入产品系列的数量:", 1, 0) while int(ordcount) < 1 or int(ordcount) > 9999: ordcount = inputbox("\033[1;32m 请输入产品系列的数量:", 1, 0) incount = inputbox("\033[1;32m 请输入您要生成的每个系列产品的防伪码的数量:", 1, 0) while int(incount) == 0: incount = inputbox("\033[1;32m 请输入您要生成防伪码的数量:\\33[0m", 1, 0) randstr.clear() for m in range(int(ordcount)): for j in range(int(incount)): randfir = '' for i in range(6): randfir = randfir + random.choice(number) randstr.append(str(int(ordstart) + m) + randfir + "\n") wfile(randstr, "scode" + str(schoice) + ".txt", "", "已生成9位系列产品防伪码共计:", "codepath") # 生成25位混合产品序列号函数,参数schoice设置输出的文件名称 def scode3(schoice): incount = inputbox("\033[1;32m 请输入您要生成的25位混合产品序列号数量:\33[0m", 1, 0) while int(incount) == 0: incount = inputbox("\033[1;32m 请输入您要生成的25位混合产品序列号数量:\33[0m", 1, 0) randstr.clear() for j in range(int(incount)): strone = '' for i in range(25): strone = strone + random.choice(letter) strtwo = strone[:5] + "-" + strone[5:10] + "-" + strone[10:15] + "-" + strone[15:20] + "-" + strone[ 20:25] + "\n" randstr.append(strtwo) wfile(randstr, "scode" + str(schoice) + ".txt", "", "已生成25混合防伪序列码共计:", "codepath") # 生成含数据分析功能防伪编码函数,参数schoice设置输出的文件名称 def scode4(schoice): intype = inputbox("\033[1;32m 请输入数据分析编号(3位字母):\33[0m", 2, 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, "", schoice)# 调用 ffcode函数生成注册信息 # 生成含数据分析功能防伪编码函数,参数scount为要生成的防伪码数量,typestr为数据分析字符 # 参数ismessage在输出完成时是否显示提示信息,为“no”不显示,为其他值显示; # 参数schoice设置输出的文件名称 def ffcode(scount, typestr, ismessage, schoice): randstr.clear() 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) letterone = "" for i in range(9): letterone = letterone + random.choice(number) 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) wfile(randstr, typestr + "scode" + str(schoice) + ".txt", ismessage, "生成含数据分析功能的防伪码共计:", "codepath") # 生成含数据分析功能防伪编码函数,参数schoice设置输出的文件名称 def scode5(schoice): default_dir = r"codeauto.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) codelist = codelist.split("\n") print(codelist) for item in codelist: codea = item.split(",")[0] codeb = item.split(",")[1] ffcode(codeb, codea, "no", schoice) # 后续补加生成防伪码函数,防伪码格式为带数据分析功能注册码 def scode6(schoice): default_dir = r"" 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) res_letter = strset.translate(remove_digits) nres_letter = list(res_letter) strpro = nres_letter[0] strtype = nres_letter[1] strclass = nres_letter[2] nres_letter = strpro.replace("'", '').replace('(', '').replace(')', '') + \ strtype.replace("'", '').replace('(', '').replace(')', '') + strclass.replace("'", '').replace('(', '').replace( ')', '') print("sssssssssss", nres_letter) card = set(codelist) tkinter.messagebox.showinfo("提示", "之前的防伪码共计:" + str(len(card))) root.withdraw() incount = inputbox("请输入补充防伪码生成的数量:", 1, 0) for j in range(int(incount) * 2): randfir = random.sample(number, 3) randsec = sorted(randfir) addcount = len(card) strone = "" for i in range(9): strone = strone + random.choice(number) 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(randstr, nres_letter + "ncode" + str(schoice) + ".txt", nres_letter, "生成后补防伪码共计:", "codeadd") # 条形码EAN13批量生成函数 def scode7(schoice): mainid = inputbox("\033[1;32m 请输入EN13的国家代码(3位):\33[0m", 3, 3) while int(mainid) < 1 or len(mainid) != 3: mainid = inputbox("\033[1;32m 请输入EN13的国家代码(3位):\33[0m", 3, 3) compid = inputbox("\033[1;32m 请输入企业代码(4位):\33[0m", 3, 4) while int(compid) < 1 or len(compid) != 4: compid = inputbox("\033[1;32m 请输入企业代码(4位):\33[0m", 3, 4) incount = inputbox("\033[1;32m 请输入要生成的条形码数量:\33[0m", 1, 0)

上一篇: SNMP 企业 OID 和应用

下一篇:

推荐阅读