1 import os
2 import qrcode
3 import random
4 import time
5 import tkinter
6 from pystrich.ean13 import EAN13Encoder
7 import tkinter.filedialog
8 import tkinter.messagebox
9 from string import digits
10
11 root = tkinter.Tk() # tkinter模4
12 # 塊為python的標准圖形界面接口。本代碼的目的是建立根窗口
13 # 初始化數據
14 number = "1234567890"
15 letter = "ABCDEFGHIJKLMNPQRSTUVWXYZ1234567890"
16 allis = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+"
17 i = 0
18
19 randstr = []
20 fourth = []
21 fifth = []
22 randfir = ""
23 randsec = ""
24 randthr = ""
25 str_one = ""
26 strone = ""
27 strtwo = ""
28 nextcard = ""
29 userput = ""
30 nres_letter = ""
31
32
33 # 創建文件夾函數
34 def mkdir(path):
35 isexists = os.path.exists(path) # 判斷文件夾路徑是否存在
36 if not isexists: # 如果文件夾路徑不存在
37 os.mkdir(path) # 創建要創建的文件夾
38
39
40 # 讀取文件內容函數
41 def openfile(filename):
42 f = open(filename) # 打開指定文件
43 fllist = f.read() # 讀取文件內容
44 f.close() # 關閉文件
45 return fllist # 返回讀取的文件內容
46
47
48 # 輸入驗證函數,showstr為input函數提供動態輸入提示文字,showorder提供驗證方式,length提供要求輸入數據的長度
49 def inputbox(showstr,showorder,length):
50 instr = input(showstr) # 使用input函數要求用戶輸入信息,showstr為輸入提示文字
51 if len(instr) != 0: # 輸入數據的長度不為零
52 # 根據輸入數據的要求,分成三種驗證方式驗證,1:數字,不限位數;2:字母;3:數字且有位數要求
53 if showorder == 1: # 驗證方式 ,數字格式,不限位數,大於零的整數
54 if str.isdigit(instr): # 驗證是否為數字
55 if instr == 0: # 驗證數字是否為0,如果是,要求重新輸入,返回值為0
56 print("\033[1;31;40m 輸入為零,請重新輸入!!\033[0m") # 要求重新輸入,返回值為“0”
57 return "0" # 函數返回值為“0”,為什么返回值為“0”呢?讀者思考一下
58 else: # 如果輸入正確,返回輸入的數據給返回值
59 return instr #將輸入的數據傳給函數返回值
60 else: # 如果輸入不是數字,要求用戶重新輸入,函數返回值為“0”
61 print("\033[1;31;40m輸入非法,請重新輸入!!\033[0m") # 要求用戶重新輸入
62 return "0" # 函數返回值為“0”
63 if showorder == 2: # 驗證方式2 ,要求字母格式,且是三個字母
64 if str.isalpha(instr): # 判斷輸入是否為字母
65 if len(instr) != length: # 判斷輸入的是否為三個字母,如果不是,則要求重新輸入,返回值為“0”
66 print("\033[1;31;40m必須輸入三個字母,請重新輸入!!\033[0m") # 要求重新輸入
67 return "0" # 返回值為“0”
68 else: # 如果輸入是三個字母,返回輸入的字母
69 return instr # 將函數返回值設置為輸入的字母
70 else: # 如果輸入不是字母
71 print("\033[1;31;40m輸入非法,請重新輸入!!\033[0m") # 要求重新輸入
72 return "0" # 返回值為“0”
73 if showorder == 3: # 驗證方式3 ,要求數字格式,且輸入數字位數有要求
74 if str.isdigit(instr): # 驗證是否為數字
75 if len(instr) != length: # 驗證輸入數字是否為要求長度位數,如果不是3位數字,則要求重新輸入
76 print("\033[1;31;40m必須輸入" + str(length) + "個數字,請重新輸入!!\033[0m") # 要求重新輸入
77 return "0" # 返回值為“0”
78 else: # 輸入數字滿足要求,設置函數返回值為輸入信息
79 return instr #設置函數返回值為輸入信息
80 else: # 如果輸入不是數字
81 print("\033[1;31;40m輸入非法,請重新輸入!!\033[0m") # 提示輸入非法,要求重新輸入
82 return "0" # 函數返回值為“0”
83 else: # 如果沒有輸入任何內容,即輸入為空
84 print("\033[1;31;40m輸入為空,請重新輸入!!\033[0m") # 提示輸入為空,要求重新輸入
85 return "0" # 函數返回值為“0”
86
87
88 # 實現屏幕輸出和文件輸出編碼信息函數,# sstr參數為輸出防偽碼數據, sfile為輸出的文件名稱
89 # typeis設置輸出完成后是否通過信息框提示, smsg為信息提示框的提示文字,datapath 保存防偽碼的文件夾
90 def wfile(sstr, sfile, typeis, smsg,datapath):
91 mkdir(datapath) # 調用該函數創建文件夾
92 datafile = datapath + "\\" + sfile # 設置保存防偽碼的文件(包含路徑)
93 file = open(datafile, 'w') # 打開保存防偽碼的文件,如果文件不存在,則創建該文件
94 wrlist = sstr # 將防偽碼信息賦值給wrlist
95 pdata = "" # 清空變量pdata,pdata存儲屏幕輸出的防偽碼信息
96 wdata = "" # 清空變量 wdata , wdata 存儲保存到文本文件的防偽碼信息
97 for i in range(len(wrlist)): # 按條循環讀取防偽碼數據
98 wdata = str(wrlist[i].replace('[', '')).replace(']', '') # 去掉字符的中括號
99 wdata = wdata.replace(''''','').replace(''''', '') # 去掉字符的引號
100 file.write(str(wdata)) # 寫入保存防偽碼的文件
101 pdata = pdata + wdata # 將單條防偽碼存儲到pdata 變量
102 file.close() # 關閉文件
103 print("\033[1;31m" + pdata + "\033[0m") # 屏幕輸出生成的防偽碼信息
104 if typeis != "no": # 是否顯示“輸出完成”的信息提示框。如果typeis的值為“no”,不現顯示
105 # 顯示“輸出完成”的信息提示框。顯示信息包含方位信息碼的保存路徑
106 tkinter.messagebox.showinfo("提示", smsg + str(len(randstr)) + "\n 防偽碼文件存放位置:" + datafile)
107 root.withdraw() # 關閉輔助窗口
108 # 實現屏幕輸出和文件輸出編碼信息,參數schoice設置輸出的文件名稱
109
110
111 def scode1( schoice):
112 # 調用inputbox函數對輸入數據進行非空、輸入合法性判斷
113 incount = inputbox("\033[1;32m 請輸入您要生成驗證碼的數量:\33[0m", 1, 0)
114 while int(incount) == 0: # 如果輸入為字母或數字0,則要求重新輸入
115 incount = inputbox("\033[1;32m 請輸入您要生成驗證碼的數量:\33[0m", 1, 0)
116 randstr.clear() # 清空保存批量注冊碼信息的變量randstr
117 for j in range(int(incount)): # 根據輸入的驗證碼數量循環批量生成注冊碼
118 randfir = '' # 設置存儲單條注冊碼的變量為空
119 for i in range(6): # 循環生成單條注冊碼
120 randfir = randfir + random.choice(number) # 產生數字隨機因子
121 randfir = randfir + "\n" # 在單條注冊碼后面添加轉義換行字符“\n”,使驗證碼單條列顯示
122 randstr.append(randfir) # 將單條注冊碼添加到保存批量驗證碼的變量randstr
123 #調用函數wfile(),實現生成的防偽碼屏幕輸出和文件輸出
124 wfile(randstr,"scode" + str(schoice) + ".txt", "", "已生成6位防偽碼共計:","codepath")
125
126
127 # 生成9位系列產品數字防偽編碼函數,參數schoice設置輸出的文件名稱
128 def scode2(schoice):
129 ordstart = inputbox("\033[1;32m 請輸入系列產品的數字起始號(3位):\33[0m", 3, 3)
130 while int(ordstart) == 0: # 如果輸入非法(符號、字母或者數字0都認為是非法輸入),重新輸入
131 ordstart = inputbox("\033[1;32m 請輸入系列產品的數字起始號(3位):\33[0m", 3, 3)
132 ordcount = inputbox("\033[1;32m 請輸入產品系列的數量:", 1, 0)
133 # 如果輸入的產品系列數量小於1或者大於9999,,則要求重新輸入
134 while int(ordcount) < 1 or int(ordcount) > 9999:
135 ordcount = inputbox("\033[1;32m 請輸入產品系列的數量:", 1, 0)
136 incount = inputbox("\033[1;32m 請輸入要生成的每個系列產品的防偽碼數量:\33[0m", 1, 0)
137 while int(incount) == 0: # 如果輸入為字母或數字0,則要求重新輸入
138 incount = inputbox("\033[1;32m 請輸入您要生成驗證碼的數量:\33[0m", 1, 0)
139 randstr.clear() # 清空保存批量注冊碼信息的變量randstr
140 for m in range(int(ordcount)): # 分類產品編號
141 for j in range(int(incount)): # 產品防偽碼編號
142 randfir = ''
143 for i in range(6): # 生成一個不包含類別的產品防偽碼
144 randfir = randfir + random.choice(number) # 每次生成一個隨機因子
145 randstr.append(str(int(ordstart) + m) + randfir + "\n") # 將生成的單條防偽碼添加到防偽碼列表
146 #調用函數wfile(),實現生成的防偽碼屏幕輸出和文件輸出
147 wfile(randstr, "scode" + str(schoice) + ".txt", "", "已生成9位系列產品防偽碼共計:","codepath")
148
149
150 # 生成25位混合產品序列號函數,參數schoice設置輸出的文件名稱
151 def scode3(schoice):
152 # 輸入要生成的防偽碼數量
153 incount = inputbox("\033[1;32m 請輸入要生成的25位混合產品序列號數量:\33[0m", 1, 0)
154 while int(incount) == 0: # 如果輸入非法(符號、字母或者數字0都認為是非法輸入),重新輸入
155 incount = inputbox("\033[1;32m 請輸入要生成的25位混合產品序列號數量:\33[0m", 1, 0)
156 randstr.clear() # 清空保存批量注冊碼信息的變量randstr
157 for j in range(int(incount)): # 按輸入數量生成防偽碼
158 strone = '' # 保存生成的單條防偽碼,不帶橫線“-”,循環時清空
159 for i in range(25):
160 strone = strone + random.choice(letter) #每次產生一個隨機因子,也就是每次產生單條防偽碼的一位
161 # 將生成的防偽碼每隔5位添加橫線“-”
162 strtwo = strone[:5] + "-" + strone[5:10] + "-" + strone[10:15] + "-" + strone[15:20] + "-" + strone[20:25] + "\n"
163 randstr.append(strtwo) # 添加防偽碼到防偽碼列表
164 #調用函數wfile(),實現生成的防偽碼屏幕輸出和文件輸出
165 wfile(randstr, "scode" + str(schoice) + ".txt", "", "已生成25混合防偽序列碼共計:","codepath")
166
167
168 # 生成含數據分析功能防偽編碼函數,參數schoice設置輸出的文件名稱
169 def scode4(schoice):
170 intype = inputbox("\033[1;32m 請輸入數據分析編號(3位字母):\33[0m", 2, 3)
171 # 驗證輸入是否是三個字母,所以要判斷輸入是否是字母和輸入長度是否為3
172 while not str.isalpha(intype) or len(intype) != 3:
173 intype = inputbox("\033[1;32m 請輸入數據分析編號(3位字母):\33[0m", 2, 3)
174 incount = inputbox("\033[1;32m 請輸入要生成的帶數據分析功能的驗證碼數量:\33[0m", 1, 0) #
175 # 驗證輸入是否是大於零的整數,判斷輸入轉換為整數值時是否大於零
176 while int(incount) == 0: # 如果轉換為整數時為零,則要求重新輸入
177 incount = inputbox("\033[1;32m 請輸入要生成的帶數據分析功能的驗證碼數量:\33[0m", 1, 0) #
178 ffcode(incount,intype,"",schoice) # 調用 ffcode函數生成注冊信息
179
180
181 # 生成含數據分析功能防偽編碼函數,參數scount為要生成的防偽碼數量,typestr為數據分析字符
182 # 參數ismessage在輸出完成時是否顯示提示信息,為“no”不顯示,為其他值顯示;參數schoice設置輸出的文件名稱
183 def ffcode(scount, typestr,ismessage, schoice):
184 randstr.clear() # 清空保存批量注冊碼信息的變量randstr
185 # 按數量生成含數據分析功能注冊碼
186 for j in range(int(scount)):
187 strpro = typestr[0].upper() # 取得三個字母中的第一個字母,並轉為大寫,區域分析碼
188 strtype = typestr[1].upper() # 取得三個字母中的第二個字母,並轉為大寫,顏色分析碼
189 strclass = typestr[2].upper() # 取得三個字母中的第三個字母,並轉為大寫,版本分析碼
190 randfir = random.sample(number, 3) # 隨機抽取防偽碼中的三個位置,不分先后
191 randsec = sorted(randfir) # 對抽取的位置進行排序並存儲給randsec變量,以便按順序排列三個字母的位置
192 letterone = "" # 清空存儲單條防偽碼的變量letterone
193 for i in range(9): # 生成9位的數字防偽碼
194 letterone = letterone + random.choice(number)
195 # 將三個字母按randsec變量中存儲的位置值添加到數字防偽碼中,並放到sim變量中
196 sim = str(letterone[0:int(randsec[0])]) + strpro + str(
197 letterone[int(randsec[0]):int(randsec[1])]) + strtype + str(
198 letterone[int(randsec[1]):int(randsec[2])]) + strclass + str(letterone[int(randsec[2]):9]) + "\n"
199 randstr.append(sim) # 將組合生成的新防偽碼添加到randstr變量
200 # 調用wfile()函數,實現生成的防偽碼屏幕輸出和文件輸出
201 wfile(randstr, typestr + "scode" + str(schoice) + ".txt", ismessage, "生成含數據分析防偽碼共計:","codepath")
202
203
204 # 生成含數據分析功能防偽編碼函數,參數schoice設置輸出的文件名稱
205 def scode5(schoice):
206 default_dir = r"mrsoft.mri" # 設置默認打開的文件名稱
207
208 # 打開文件選擇對話框,指定打開的文件名稱為"mrsoft.mri" ,擴展名為“mri”,可以使用記事本打開和編輯
209 file_path = tkinter.filedialog.askopenfilename(filetypes=[("Text file","*.mri")],title=u"請選擇自動防偽碼智能批處理文件:",
210 initialdir=(os.path.expanduser(default_dir)))
211 codelist = openfile(file_path) # 讀取從文件選擇對話框選中的文件
212 print("前:",codelist)
213 codelist = codelist.split("\n") # 把讀取的信息內容添加回車,以便列輸出顯示
214 print("后:",codelist)
215 for item in codelist: # 按讀取的信息循環生成防偽碼
216 codea = item.split(",")[0] # 每一行信息中用 ","分割,","前面的信息存儲防偽碼標准信息
217 codeb = item.split(",")[1] # 每一行信息中用 ","分割,","后面的信息存儲防偽碼生成的數量
218 ffcode(codeb, codea,"no" ,schoice) # 調用ffcode函數批量生成同一標識信息的防偽碼
219
220
221 # 后續補加生成防偽碼函數,防偽碼格式為帶數據分析功能注冊碼
222 def scode6(schoice):
223 default_dir = r"c:\ABDscode5.txt" # 設置默認打開的文件名稱
224 # 按默認的文件名稱打開文件選擇對話框,用於打開已經存在的防偽碼文件
225 file_path = tkinter.filedialog.askopenfilename(title=u"請選擇已經生成的防偽碼文件",initialdir=(os.path.expanduser(default_dir)))
226 codelist = openfile(file_path) # 讀取從文件選擇對話框選中的文件
227 codelist = codelist.split("\n") # 把讀取的信息內容添加回車,以便列輸出顯示
228 codelist.remove("") # 刪除列表中的空行
229 strset = codelist[0] # 讀取一行數據,以便獲取原驗證碼的字母標志信息
230 remove_digits = strset.maketrans("", "", digits) # 用maketrans方法創建刪除數字的字符映射轉換表
231 res_letter = strset.translate(remove_digits) # 根據字符映射轉換表刪除該條防偽碼中的數字,獲取字母標識信息
232 nres_letter = list(res_letter) # 把信息用列表變量nres_letter存儲
233 strpro = nres_letter[0] # 從列表變量中取得第一個字母,即區域分析碼
234 strtype = nres_letter[1] # 從列表變量中取得第二個字母,即色彩分析碼
235 strclass = nres_letter[2] # 從列表變量中取得第三個字母,即版次分析碼
236 # 去除信息中的括號和引號
237 nres_letter = strpro.replace(''''','').replace(''''', '') + strtype.replace(
238 ''''','').replace(''''', '') + strclass.replace(''''','').replace(''''', '')
239 print("sssssssssss",nres_letter)
240 card = set(codelist) # 將原有防偽碼放到集合變量card中
241 # 利用tkinter的messagebox提示用戶之前生成的防偽碼數量
242 tkinter.messagebox.showinfo("提示", "之前的防偽碼共計:" + str(len(card)))
243 root.withdraw() # 關閉提示信息框
244 incount = inputbox("請輸入補充驗證碼生成的數量:", 1, 0) # 讓用戶輸入新補充生成的防偽碼數量
245 # 最大值按輸入生成數量的2倍數量生成新防偽碼,防止新生成防偽碼與原有防偽碼重復造成新生成的防偽碼數量不夠,
246 for j in range(int(incount) * 2):
247 randfir = random.sample(number, 3) # 隨機產生3位不重復的數字
248 randsec = sorted(randfir) #對產生的數字排序
249 addcount = len(card) # 記錄集合中防偽碼的總數量
250 strone = "" # 清空存儲單條防偽碼的變量strone
251 for i in range(9): # 生成9位的數字防偽碼
252 strone = strone + random.choice(number)
253 # 將三個字母按randsec變量中存儲的位置值添加到數字防偽碼中,並放到sim變量中
254 sim = str(strone[0:int(randsec[0])]) + strpro + str(
255 strone[int(randsec[0]):int(randsec[1])]) + strtype + str(
256 strone[int(randsec[1]):int(randsec[2])]) + strclass + str(strone[int(randsec[2]):9]) + "\n"
257 card.add(sim) # 添加新生成的防偽碼到集合
258 # 如果添加到集合,證明生成的防偽碼與原有的防偽碼沒有產生重復
259 if len(card) > addcount:
260 randstr.append(sim) # 添加新生成的防偽碼到新防偽碼列表
261 addcount = len(card) # 記錄最添加新生成防偽碼集合的防偽碼數量
262 if len(randstr) >= int(incount): # 如果新防偽碼列表中的防偽碼數量達到輸入的防偽碼數量
263 print(len(randstr)) # 輸出已生成防偽碼的數量
264 break # 退出循環
265 # 調用函數wfile()函數,實現生成的防偽碼屏幕輸出和文件輸出
266 wfile(randstr, nres_letter + "ncode" + str(choice) + ".txt", nres_letter, "生成后補防偽碼共計:","codeadd")
267 # tkinter.messagebox.showinfo("提示", "已生成補充防偽碼共:" + str(len(randstr))) # 提示
268 # root.withdraw()
269
270
271 # 條形碼EAN13批量生成函數
272 def scode7(schoice):
273 mainid = inputbox("\033[1;32m 請輸入EN13的國家代碼(3位) :\33[0m", 3, 3) # 輸入3位國家代碼
274 # while int(mainid) < 1 or len(mainid) != 3: # 驗證輸入是否為3位數字(轉為整數后小於1和長度不等於3,重新輸入)
275 # mainid = inputbox("\033[1;32m 請輸入EAN13的國家代碼(3位)::\33[0m", 1, 0)
276 compid = inputbox("\033[1;32m 請輸入EAN13的企業代碼(4位):\33[0m", 3, 4) # 輸入4位企業代碼
277 # while int(compid) < 1 or len(compid) != 4: # 驗證輸入是否為4位數字
278 # compid = inputbox("\033[1;32m 請輸入EAN13的企業代碼(4位):\33[0m", 1, 0)
279 incount = inputbox("\033[1;32m 請輸入要生成的條形碼數量:\33[0m", 1, 0) # 輸入要生成的條形碼數量
280 while int(incount) == 0: # 輸入信息轉為整數后等於0,重新輸入
281 incount = inputbox("\033[1;32m 請輸入要生成的條形碼數量:\33[0m", 1, 0)
282 mkdir("barcode") # 判斷保存條形碼的文件夾是否存在,不存在,則創建該文件夾
283 for j in range(int(incount)): # 批量生成條形碼
284 strone = '' # 清空存儲單條條形碼的變量
285 for i in range(5): # 生成條形碼的6位(除國家代碼、企業代碼和校驗位之外的6位)數字
286 strone = strone + str(random.choice(number))
287 barcode=mainid +compid +strone # 把國家代碼、企業代碼和新生成的隨機碼進行組合
288 # 計算條形碼的校驗位
289 evensum = int(barcode[1]) + int(barcode[3]) + int(barcode[5]) + int(barcode[7]) + int(barcode[9]) +int(barcode[11]) # 偶數位
290 oddsum =int( barcode[0])+int(barcode[2])+int(barcode[4])+int(barcode[6])+int(barcode[8]) +int(barcode[10])
291 # checkbit=int(10-(evensum *3 + oddsum)%10)
292 checkbit = int((10 - (evensum * 3 + oddsum) %10)% 10)
293 barcode=barcode+str(checkbit) # 組成完整的EAN13條形碼的13位數字
294 print (barcode)
295 encoder = EAN13Encoder(barcode) # 調用EAN13Encoder生成條形碼
296 encoder.save("barcode\\" + barcode + ".png") # 保存條形碼信息圖片到文件
297
298
299 # 本函數生成固定的12位二維碼,讀者可以根據實際需要修改成按輸入位數進行生成的函數
300 def scode8(schoice):
301 # 輸入要生成的二維碼數量
302 incount = inputbox("\033[1;32m 請輸入要生成的12位數字二維碼數量:\33[0m", 1, 0)
303 while int(incount) == 0: # 如果輸入不是大於0的數字,重新輸入
304 incount = inputbox("\033[1;32m 請輸入要生成的12位數字二維碼數量:\33[0m", 1, 0)
305 mkdir("qrcode") # 判斷保存二維碼的文件夾是否存在,不存在,則創建該文件夾
306 for j in range(int(incount)): # 批量生成二維碼
307 strone = '' # 清空存儲單條二維碼的變量
308 for i in range(12): # 生成單條二維碼數字
309 strone = strone + str(random.choice(number))
310 encoder =qrcode.make(strone) # 生成二維碼
311 encoder.save("qrcode\\" + strone + ".png") # 保存二維碼圖片到文件
312
313
314 #抽獎函數
315 def scode9(schoice):
316 default_dir = r"lottery.ini" # 設置默認打開文件為開發路徑下的"lottery.ini"
317 # 選擇包含用戶抽獎信息票號的文件,擴展名為“*.ini”
318 file_path = tkinter.filedialog.askopenfilename(filetypes=[("Ini file","*.ini")],title=u"請選擇包含抽獎號碼的抽獎文件:",initialdir=(os.path.expanduser(default_dir)))
319 codelist = openfile(file_path) # 調用 openfile()函數讀取剛打開的抽獎文件
320 codelist = codelist.split("\n") # 通過回行轉義符把抽獎信息分割成抽獎數列
321 incount = inputbox("\033[1;32m 請輸入要生成的中獎數量:\33[0m", 1, 0) # 要求用戶輸入中(抽)獎數量
322 while int(incount) == 0 or len(codelist)< int(incount): # 如果輸入中(抽)獎數量等於0或超過抽獎數組數量,重新輸入
323 incount = inputbox("\033[1;32m 請輸入要生成的抽獎數量:\33[0m", 1, 0)
324 strone = random.sample(codelist,int(incount)) # 根據輸入的中獎數量進行抽獎
325
326 print("\033[1;35m 抽獎信息名單發布: \33[0m")
327 for i in range(int(incount)): # 循環將抽獎數列的引號和中括號去掉
328 wdata = str(strone[i].replace('[', '')).replace(']', '') # 將抽獎數列的中括號去掉
329 wdata = wdata.replace(''''','').replace(''''', '') # 將抽獎數列的引號去掉
330 print("\033[1;32m " + wdata + "\33[0m") # 輸出中獎信息
331
332
333 # 輸入數字驗證,判斷輸入是否在0-9之間的整數
334 def input_validation(insel):
335 if str.isdigit(insel):
336 insel = int(insel)
337 # if insel == 0:
338 # # print("\033[1;31;40m 輸入非法,請重新輸入!!\033[0m")
339 # return 0
340 # else:
341 # return insel
342 return insel
343 else:
344 print("\033[1;31;40m 輸入非法,請重新輸入!!\033[0m")
345 return 0
346
347 # 企業編碼管理系統主菜單
348 def mainmenu():
349 # os.system("clear")
350 print("""\033[1;35m
351 ****************************************************************
352 企業編碼生成系統
353 ****************************************************************
354 1.生成6位數字防偽編碼 (213563型)
355 2.生成9位系列產品數字防偽編碼(879-335439型)
356 3.生成25位混合產品序列號(B2R12-N7TE8-9IET2-FE35O-DW2K4型)
357 4.生成含數據分析功能的防偽編碼(5A61M0583D2)
358 5.智能批量生成帶數據分析功能的防偽碼
359 6.后續補加生成防偽碼(5A61M0583D2)
360 7.EAN-13條形碼批量生成
361 8.二維碼批量輸出
362 9.企業粉絲防偽碼抽獎
363 0.退出系統
364 ================================================================
365 說明:通過數字鍵選擇菜單
366 ================================================================
367 \033[0m""")
368
369
370 def codeprint(cstr, cint):
371 str1 = cstr[0]
372 str2 = cstr[1]
373 str3 = cstr[2]
374 for i in range(int(cint)):
375 strbook = str1 + str2 + random.choice(letter) + random.choice(letter) + random.choice(letter) + str2 + str3
376 print(strbook)
377
378
379 # 通過循環控制用戶對程序功能的選擇
380 while i < 9:
381 # 調入程序主界面菜單
382 mainmenu()
383 # 鍵盤輸入需要操作的選項
384 choice = input("\033[1;32m 請輸入您要操作的菜單選項:\33[0m")
385 if len(choice) != 0: # 輸入如果不為空
386 choice = input_validation(choice) # 驗證輸入是否為數字
387 if choice == 1:
388 scode1( str(choice)) # 如果輸入大於零的整數,調用scode1()函數生成注冊碼
389 # 選擇菜單2,調用scode2()函數生成9位系列產品數字防偽編碼
390 if choice == 2:
391 scode2(choice)
392 # 選擇菜單3,調用scode3()函數生成25位混合產品序列號
393 if choice == 3:
394 scode3(choice)
395 # 選擇菜單4,調用scode4()函數生成含數據分析功能的防偽編碼
396 if choice == 4:
397 scode4(choice)
398 # 選擇菜單5,調用scode5()函數智能批量生成帶數據分析功能的防偽碼
399 if choice == 5:
400 scode5(choice)
401 # 選擇菜單6,調用scode6()函數后續補加生成防偽碼
402 if choice == 6:
403 scode6(choice)
404 # 選擇菜單7,調用scode7()函數批量生成條形碼
405 if choice == 7:
406 scode7( choice)
407 # 選擇菜單8,調用scode8()函數批量生成二維碼
408 if choice == 8:
409 scode8( choice)
410 # 選擇菜單9,調用scode9()函數生成企業粉絲抽獎程序
411 if choice == 9:
412 scode9( choice)
413 # 選擇菜單0,退出系統
414 if choice == 0:
415 i = 0
416 print("正在退出系統!!")
417 break
418 else:
419 print("\033[1;31;40m 輸入非法,請重新輸入!!\033[0m")
420 time.sleep(2)