易语言编写一个账号密码生成器

目录

一.运行原理

二.软件界面&组件

三.代码

1.随机取字符生成类型

2.对应子程序的填充

2.1汉字

2.2英文

2.3数字&符号

3.强制插入

4.一些细节

4.1生成方式强制必选

4.2长度要求

四.整合代码

窗口程序集_启动窗口

常量表

五.写在最后

一.运行原理

比较简单的一个小玩意,之前就写过一个,还发到B站了,中途修bug的时候还捣鼓出来了一个新式的奇偶性判断的方法(具体可以看我发的文章),但现在看来纯纯的屎山,所以再写一个新版的

软件运行原理如下:

取随机数0-3,根据不同数字决定数字、汉字、英文还是符号

根据对应数字,调用对应子程序,在常量中随机选取一个字符

上面的步骤无限循环,直至满足长度为止

在对应位置用强行插入的文本替换掉对应长度的文本

二.软件界面&组件

运行时的软件界面​​​​

编辑器中的软件界面

对应的名称在下面,大家按照顺序放组件(这样可以直接抄走代码)

按照从上而下,由左至右的叙述方式,分别是:

标签1,编辑框1

标签2,编辑框2

标签3,编辑框3

选择框1,选择框2,选择框3,选择框4,按钮1

标签4,编辑框4

三.代码

1.随机取字符生成类型

创建一个按钮1被单击的子程序(鼠标左键按下也行)

输入取随机数代码

.版本 2

.程序集 窗口程序集_启动窗口

.子程序 _按钮1_被单击

.局部变量 数字, 整数型

置随机数种子 ()

数字 = 取随机数 (0, 3)

.如果真 (数字 = 0 且 选择框1.选中 = 真)

中文 ()

.如果真结束

.如果真 (数字 = 1 且 选择框2.选中 = 真)

英文 ()

.如果真结束

.如果真 (数字 = 2 且 选择框3.选中 = 真)

数字 ()

.如果真结束

.如果真 (数字 = 3 且 选择框4.选中 = 真)

符号 ()

对应的创建子程序:

.版本 2

.子程序 中文

.子程序 英文

.子程序 数字

.子程序 符号

2.对应子程序的填充

2.1汉字

新建一个常量,叫做“汉字”,把准备好的汉字复制进去

这里使用的是这篇文章归纳的汉字

回到程序集,新建一个程序集变量“结果”和“生成次数”,类型为文本型和整数型

在子程序“中文”中写下面的代码:

.版本 2

.子程序 中文

.局部变量 文字, 文本型

置随机数种子 ()

文字 = 取文本中间 (#汉字, 取随机数 (0, 6996), 2)

结果 = 结果 + 文字

生成次数 = 生成次数 + 1

其中,0-6996的取值范围应当适当调整,即0—#汉字的文本长度-2

子程序执行完毕,变量“结果”添加了一位字符,把变量给编辑框4.内容(按钮单击反馈事件的结尾)

编辑框4.内容 = 结果

运行软件,发现需要按一下或者多下按钮才能生成一个汉字

那么,就应当使得生成一直持续下去直到某个特定长度

那么就使用“判断循环首”命令

“_按钮1_被单击”子程序下的代码变成这样:

.版本 2

置随机数种子 ()

.判断循环首 (生成次数 ≠ 到数值 (编辑框3.内容)+1)

数字 = 取随机数 (0, 3)

.如果真 (数字 = 0 且 选择框1.选中 = 真)

中文 ()

.如果真结束

.如果真 (数字 = 1 且 选择框2.选中 = 真)

英文 ()

.如果真结束

.如果真 (数字 = 2 且 选择框3.选中 = 真)

数字 ()

.如果真结束

.如果真 (数字 = 3 且 选择框4.选中 = 真)

符号 ()

.如果真结束

.判断循环尾 ()

编辑框4.内容 = 结果

结果 = “”

最后加上结果=“”,将内容清除,下一次就从0开始

下面运行一下,欸,出问题了——

可以看到,生成结果里混入了特殊字符和无法显示的字符

这个问题很好解释,每个中文都是两字节的,但我们取随机数就可能从某个汉字的一半去读取

如下图:

这个问题也很好解决,首先要新建一个程序集变量“随机数”,把取随机数单独拎出,如图:

下面就是最重要的一步,输入下面这段“魔咒”

这个方法之前的文章里也出现过,是用来判断奇偶性的

这行代码是一个变式,会把任何数值转换为奇数

这样一来就能稳定的生成汉字啦

2.2英文

英文挺好写的,把中文拿过来改一改就好了

要注意这里随机数取到51是因为我的英文常量里包含了大小写

.版本 2

.子程序 英文

.局部变量 文字, 文本型

.局部变量 随机数, 整数型

置随机数种子 ()

随机数 = 取随机数 (0, 51)

文字 = 取文本中间 (#英文, 随机数, 1)

结果 = 结果 + 文字

生成次数 = 生成次数 + 1

2.3数字&符号

数字符号就更好写了,直接ctrl+c上面的内容然后再ctrl+v并且修改修改:

.版本 2

.子程序 数字

.局部变量 文字, 文本型

.局部变量 随机数, 整数型

置随机数种子 ()

随机数 = 取随机数 (0, 9)

文字 = 取文本中间 (“1234567890”, 随机数, 1)

结果 = 结果 + 文字

生成次数 = 生成次数 + 1

.子程序 符号

.局部变量 文字, 文本型

.局部变量 随机数, 整数型

置随机数种子 ()

随机数 = 取随机数 (0, 31)

文字 = 取文本中间 (#符号, 随机数, 1)

结果 = 结果 + 文字

生成次数 = 生成次数 + 1

符号常量如下:

~!@#$%^&*()_+=-`';":[]{}\|?><,./

写完这些就能跑啦

等等,怎么只能用一次

哈哈哈,是不是没看出来呢,上面的代码里缺少了一个关键的东西

加上箭头指的试试

结果清零了,次数怎么能不清零呢?

前面就看出来的同学在评论区发“不愧是我”

3.强制插入

强制插入在上一个版本中直接是子文本替换,所以当选择中文时会关闭这项功能,因为可能会出现乱码(之前你们也了解过了原理了)

但是这个版本,我要加入对中文的支持!

肯定不能简单的取文本长度()了

哼哼~看神器:

.版本 2

.子程序 取字符数, 整数型

.参数 文本, 文本型

.局部变量 长度, 整数型

.局部变量 代码, 整数型

.局部变量 字符位置, 整数型

.局部变量 实际长度, 整数型

长度 = 取文本长度 (文本)

实际长度 = 长度

字符位置 = 1

.判断循环首 (字符位置 ≤ 长度)

.如果 (取代码 (取文本中间 (文本, 字符位置, 1), ) < 0)

字符位置 = 字符位置 + 2

实际长度 = 实际长度 - 1

.否则

字符位置 = 字符位置 + 1

.如果结束

.判断循环尾 ()

返回 (实际长度)

这个绝妙的主意当然不是我想出来的啦

是在当时找资料的时候无意间在吾爱上发现的一篇文章

这样就好啦,再在按钮单击的事件处理子程序里改一改:

.版本 2

.支持库 spec

.子程序 _按钮1_被单击

.局部变量 数字, 整数型

置随机数种子 ()

.判断循环首 (生成次数 ≠ 到数值 (编辑框3.内容) + 1)

.如果真 (编辑框1.内容 ≠ “” 且 生成次数 = 到数值 (编辑框2.内容))

调试输出 (生成次数)

结果 = 结果 + 编辑框1.内容

生成次数 = 生成次数 + 取字符数 (编辑框1.内容) + 1

到循环尾 ()

.如果真结束

数字 = 取随机数 (0, 3)

.如果真 (数字 = 0 且 选择框1.选中 = 真)

中文 ()

.如果真结束

.如果真 (数字 = 1 且 选择框2.选中 = 真)

英文 ()

.如果真结束

.如果真 (数字 = 2 且 选择框3.选中 = 真)

数字 ()

.如果真结束

.如果真 (数字 = 3 且 选择框4.选中 = 真)

符号 ()

.如果真结束

.判断循环尾 ()

编辑框4.内容 = 结果

结果 = “”

生成次数 = 0

运行一下看看,是不是成功了

顺带提一嘴,为了防止用户输入特别大的数字导致软件不能移动,最好在判断循环尾()上方加 处理事件 ()

4.一些细节

写这个软件还是需要注意一些细节的,否则容易出bug

这个软件要注意的无非就两个:

1.一定需要一种生成方式

2.强制插入结尾位置不能超出文本范围

4.1生成方式强制必选

.版本 2

.如果真 (选择框1.选中 = 假 且 选择框2.选中 = 假 且 选择框3.选中 = 假 且 选择框4.选中 = 假)

信息框 (“请选择至少一种生成方式!”, 0, “错误:”, )

返回 ()

这个加到哪里你自己应该也清楚的

这里使用返回(),避免执行下面的内容

4.2长度要求

这个也挺简单的,给你们放出来看看吧

.版本 2

.如果真 (到数值 (编辑框2.内容) + 取字符数 (编辑框1.内容) > 到数值 (编辑框3.内容))

信息框 (“强制插入文本的范围超出了生成长度!”, 0, “错误:”, )

返回 ()

四.整合代码

软件代码(.e文件)会绑定资源,直接下载就好

不过还是想放出来

窗口程序集_启动窗口

.版本 2

.程序集 窗口程序集_启动窗口

.程序集变量 结果, 文本型

.程序集变量 生成次数, 整数型

.子程序 _按钮1_被单击

.局部变量 数字, 整数型

.如果真 (选择框1.选中 = 假 且 选择框2.选中 = 假 且 选择框3.选中 = 假 且 选择框4.选中 = 假)

信息框 (“请选择至少一种生成方式!”, 0, “错误:”, )

返回 ()

.如果真结束

.如果真 (到数值 (编辑框2.内容) + 取字符数 (编辑框1.内容) > 到数值 (编辑框3.内容))

信息框 (“强制插入文本的范围超出了生成长度!”, 0, “错误:”, )

返回 ()

.如果真结束

置随机数种子 ()

.判断循环首 (生成次数 ≠ 到数值 (编辑框3.内容) + 1)

.如果真 (编辑框1.内容 ≠ “” 且 生成次数 = 到数值 (编辑框2.内容))

结果 = 结果 + 编辑框1.内容

生成次数 = 生成次数 + 取字符数 (编辑框1.内容) + 1

到循环尾 ()

.如果真结束

数字 = 取随机数 (0, 3)

.如果真 (数字 = 0 且 选择框1.选中 = 真)

中文 ()

.如果真结束

.如果真 (数字 = 1 且 选择框2.选中 = 真)

英文 ()

.如果真结束

.如果真 (数字 = 2 且 选择框3.选中 = 真)

数字 ()

.如果真结束

.如果真 (数字 = 3 且 选择框4.选中 = 真)

符号 ()

.如果真结束

处理事件 ()

.判断循环尾 ()

编辑框4.内容 = 结果

结果 = “”

生成次数 = 0

.子程序 中文

.局部变量 文字, 文本型

.局部变量 随机数, 整数型

置随机数种子 ()

随机数 = 取随机数 (0, 6995)

随机数 = 取整 (随机数 ÷ 2) × 2 + 1

文字 = 取文本中间 (#汉字, 随机数, 2)

结果 = 结果 + 文字

生成次数 = 生成次数 + 1

.子程序 英文

.局部变量 文字, 文本型

.局部变量 随机数, 整数型

置随机数种子 ()

随机数 = 取随机数 (0, 51)

文字 = 取文本中间 (#英文, 随机数, 1)

结果 = 结果 + 文字

生成次数 = 生成次数 + 1

.子程序 数字

.局部变量 文字, 文本型

.局部变量 随机数, 整数型

置随机数种子 ()

随机数 = 取随机数 (0, 9)

文字 = 取文本中间 (“1234567890”, 随机数, 1)

结果 = 结果 + 文字

生成次数 = 生成次数 + 1

.子程序 符号

.局部变量 文字, 文本型

.局部变量 随机数, 整数型

置随机数种子 ()

随机数 = 取随机数 (0, 31)

文字 = 取文本中间 (#符号, 随机数, 1)

结果 = 结果 + 文字

生成次数 = 生成次数 + 1

.子程序 取字符数, 整数型

.参数 文本, 文本型

.局部变量 长度, 整数型

.局部变量 代码, 整数型

.局部变量 字符位置, 整数型

.局部变量 实际长度, 整数型

长度 = 取文本长度 (文本)

实际长度 = 长度

字符位置 = 1

.判断循环首 (字符位置 ≤ 长度)

.如果 (取代码 (取文本中间 (文本, 字符位置, 1), ) < 0)

字符位置 = 字符位置 + 2

实际长度 = 实际长度 - 1

.否则

字符位置 = 字符位置 + 1

.如果结束

.判断循环尾 ()

返回 (实际长度)

常量表

.版本 2

.常量 汉字, "<文本长度: 6998>"

.常量 英文, "<文本长度: 52>"

.常量 符号, "<文本长度: 32>"

常量具体内容见上

五.写在最后

特别感谢下列文章(帖子)与作者:

易语言取字符个数 例子 非文本长度 - 『编程语言区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

3500个常用汉字列表_常用字符-CSDN博客

个人主页:

小狄同学呀_-CSDN博客

B站主页:

小狄同学呀的个人空间-小狄同学呀个人主页-哔哩哔哩视频 (bilibili.com)

另外通知:

我即将开展易语言系列课程的更新,计划是一条条代码的给大家讲明白

也请期待一下吧~

友情链接: