Python授权码生成器(密码生成器)

有时候我们需要为自己的产品设置一些使用权限 ,这就需要随机授权码生成器。当然这是简单的随机生成器,像Adobe这种授权码是需要一定的加密算法生成,然后再验证授权码是否正确,而不是简单的生成。

本文主要介绍wxpython中简单控件的使用和随机字符串的生成,包括:

①文本框
self.text = wx.TextCtrl(panel, wx.ID_ANY, pos=(0, 50), size=(484, 205), style=wx.TE_MULTILINE)
②按钮
button = wx.Button(panel, wx.ID_ANY, pos=(100, 255), size=(150, 50), label=’生成’)
button.Bind(wx.EVT_BUTTON, self.GenPassword)
③静态文字
rev = wx.StaticText(panel, -1, “生成的密码长度:”, pos=(5, 10))
rev.SetForegroundColour(“black”)
rev.SetBackgroundColour(“”) # 文字背景颜色,不输入为透明
④选择框
self.cb1 = wx.CheckBox(panel, label=’区分大小写’, pos=(380, 10))
self.cb1.SetValue(1)
⑤随机字符串用列表推导式即可

主要功能:生成指定长度的授权码,区分大小写,查找上一个

代码:

import random
import string
import wx


class InfoPanel(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, "GenCode",  pos=(0, 0), size=(500, 380))
        panel = wx.Panel(self, -1)
        rev = wx.StaticText(panel, -1, "生成的密码长度:", pos=(5, 10))
        rev.SetForegroundColour("black")
        rev.SetBackgroundColour("")  # 文字背景颜色,不输入为透明
        button = wx.Button(panel, wx.ID_ANY, pos=(100, 255), size=(150, 50), label='生成')
        button.Bind(wx.EVT_BUTTON, self.GenPassword)
        button2 = wx.Button(panel, wx.ID_ANY, pos=(250, 255), size=(150, 50), label='清空')
        button2.Bind(wx.EVT_BUTTON, self.Clear)
        button3 = wx.Button(panel, wx.ID_ANY, pos=(280, 5), size=(80, 30), label='复制到剪切板')
        button3.Bind(wx.EVT_BUTTON, self.OnCopy)
        button4 = wx.Button(panel, wx.ID_ANY, pos=(100, 305), size=(300, 30), label='上一个')
        button4.Bind(wx.EVT_BUTTON, self.previous)
        self.text = wx.TextCtrl(panel, wx.ID_ANY, pos=(0, 50), size=(484, 205), style=wx.TE_MULTILINE)
        self.text2 = wx.TextCtrl(panel, wx.ID_ANY, pos=(110, 5), size=(150, 30))
        self.text2.AppendText(str(8))
        self.cb1 = wx.CheckBox(panel, label='区分大小写', pos=(380, 10))
        self.cb1.SetValue(1)
        self.count = 0
        self.genPwd = ""
        self.box = []

    def GenPassword(self, event):
        try:
            self.text.Clear()
            length = int(self.text2.GetValue())
            numOfNum = random.randint(1, length - 1)
            numOfLetter = length - numOfNum
            # 选中numOfNum个数字
            slcNum = [random.choice(string.digits) for i in range(numOfNum)]
            # 选中numOfLetter个字母
            slcLetter = [random.choice(string.ascii_letters) for i in range(numOfLetter)]
            # 打乱这个组合
            slcChar = slcNum + slcLetter
            random.shuffle(slcChar)
            # 生成密码
            self.genPwd = ''.join([i for i in slcChar])
            if self.cb1.GetValue() == 1:
                self.text.AppendText(self.genPwd)
                self.box.append(self.genPwd)
            else:
                self.text.AppendText(self.genPwd.lower())
                self.box.append(self.genPwd.lower())
            self.count += 1
        except ValueError:
            self.text.AppendText("输入错误,请输入大于1整数!!!")

    def previous(self, event):
        self.text.Clear()
        try:
            self.text.AppendText(self.box[self.count - 2])
        except IndexError:
            self.text.AppendText("无")

    def Clear(self, event):
        self.text.Clear()
        self.text2.Clear()
        self.count = 0
        self.box = []


    def OnCopy(self, event):
        text_obj = wx.TextDataObject()
        text_obj.SetText(self.text.GetValue())
        if wx.TheClipboard.IsOpened() or wx.TheClipboard.Open():
            wx.TheClipboard.SetData(text_obj)
            wx.TheClipboard.Close()
        dlg = wx.MessageDialog(self,
                               '已经复制到剪切板', '复制到剪切板', wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()


class MainApp(wx.App):
    def OnInit(self):
        self.frame = InfoPanel(None, -1)
        self.frame.Show(True)
        self.SetTopWindow(self.frame)
        return True


if __name__ == '__main__':
    app = MainApp(0)
    app.MainLoop()

这里写图片描述
更多内容访问omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2018 • OmegaXYZ-版权所有 转载请注明出处

### 回答1: IEEE 754双精度浮点数在线转换器是一个用于将双精度浮点数表示转换为二进制、十进制、十六进制等不同进制形式的工具。IEEE 754是一种国际标准,用于规定浮点数的表示方式,广泛应用于计算机系统中。 使用该在线转换器,我们可以输入一个双精度浮点数,然后选择要将其转换为的进制类型。比如,如果我们选择二进制,该转换器将把双精度浮点数的每个位转换为一个二进制数字,并将其合并为一个整体的二进制数值。如果我们选择十进制,该转换器将转换为指数形式,其中有效位数和指数分别用十进制表示。如果我们选择十六进制,该转换器将将数值转换为十六进制表示形式。 在线转换器的优点是方便快捷,并且适用于各种不同的浮点数转换需求。它可以帮助我们更好地理解和分析浮点数的表示方式,并方便地进行进制转换和计算。它还可以用于教育和学术研究领域,帮助学生和研究人员更好地学习和理解浮点数表示和运算。 当然,值得注意的是,浮点数在计算中存在精度损失的问题,因为浮点数的表示方式是有限的。因此,在进行浮点数转换和计算时,我们需要注意精度问题,并避免由于精度误差导致的错误结果。此外,不同计算机系统和编程语言可能会有不同的浮点数表示方式和误差范围,因此,在进行数据转换和计算时,我们还需要注意不同环境下的差异。 ### 回答2: IEEE 754双精度浮点数在线转换器是一种在线工具,用于将浮点数转换为IEEE 754双精度二进制表示形式,或者将IEEE 754双精度二进制表示形式转换为浮点数。 IEEE 754是一种标准,用于表示和计算浮点数。双精度浮点数在计算机科学和工程领域中经常使用,因为它们提供了更高的精度和表示范围。 使用IEEE 754双精度浮点数在线转换器,用户可以输入一个浮点数或IEEE 754双精度二进制表示形式,然后得到转换结果。对于浮点数输入,转换器将其转换为IEEE 754双精度二进制表示形式,并显示出来。对于二进制输入,转换器将其转换为浮点数,并显示结果。 这个在线转换器对于开发人员、计算机科学家和工程师来说非常有用,因为它可以方便地进行浮点数的表示和计算。例如,在科学计算、图形处理和人工智能领域,双精度浮点数被广泛应用于高精度计算和数据表示。转换器可以帮助用户验证浮点数的表示是否正确,或者将浮点数转换为计算机可以理解的形式。 总之,IEEE 754双精度浮点数在线转换器是一个实用工具,可以方便地进行浮点数和二进制表示之间的转换,帮助用户在计算和数据处理过程中更好地理解和应用双精度浮点数。 ### 回答3: IEEE 754是一种为浮点数表示和运算而制定的浮点数标准。它定义了如何使用二进制表示浮点数,并包含了一系列规则来进行浮点数计算。 IEEE 754双精度浮点数是一种用于表示双精度浮点数的二进制格式。它由1位符号位、11位指数位和52位尾数位组成。符号位用于表示数的正负,指数位用于表示数的阶,尾数位用于表示数的有效数字。 双精度浮点数在线转换器是一种工具,用于将用户输入的十进制数转换为IEEE 754双精度浮点数的二进制表示形式,或将输入的二进制表示形式转换为十进制数的形式。 使用双精度浮点数在线转换器只需按照以下步骤进行操作: 1. 打开双精度浮点数在线转换器的网页或应用程序。 2. 如果要将十进制数转换为二进制表示形式,输入待转换的十进制数。 3. 点击转换按钮或选项,将十进制数转换为IEEE 754双精度浮点数的二进制表示形式。 4. 如果要将二进制表示形式转换为十进制数,输入待转换的二进制表示形式。 5. 点击转换按钮或选项,将二进制表示形式转换为十进制数的形式。 6. 查看转换结果,可以获得十进制数到浮点数的转换结果,或浮点数到十进制数的转换结果。 双精度浮点数在线转换器的作用是帮助用户在不熟悉IEEE 754双精度浮点数表示方法的情况下,快速准确地进行浮点数的转换。这个工具在计算机科学、工程领域以及其他需要进行浮点数计算的领域中得到广泛应用。通过使用双精度浮点数在线转换器,用户可以更方便地进行双精度浮点数的转换和计算。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值