The code generation system to achieve enterprise security code generation function supplement

A Code

def scode6(schoice):
    default_dir = r"c:\ABDscode5.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]  # 读取一行数据,以便获取原验证码的字母标志信息
    print(strset)
    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()

Two runs

Three instructions

1 strset.maketrans("", "", digits)用法

To delete a string representation of the characters, the digit maps to none.

reference: 

https://www.runoob.com/python3/python3-string-maketrans.html

https://www.cnblogs.com/wushuaishuai/p/7687074.html

2 strset.translate(remove_digits)用法

reference: 

https://www.runoob.com/python3/python3-string-maketrans.html

https://www.cnblogs.com/wushuaishuai/p/7687074.html

3 str.replace usage ( '' '' '' ')

Remove string triple quotes

Guess you like

Origin blog.csdn.net/chengqiuming/article/details/93784905