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)