用你的Excel打造一个随机密码生成器

密码管理的重要性不言而喻,火箭君也曾多次撰文提醒大家要主要自己的密码安全性。那么本期,就和火箭君一起在excel中打造随机密码生成器,让你的密码安全由你自己来掌握。

首先,我们要解决的问题是,如何创建密码中的各个字符。

创建随机数字

随机数字的创建可能小伙伴们都比较熟悉,通过使用RAND()或者RANDBETWEEN()这两个函数,可以创建出从0~9这10个数字。但是要注意的是,RANDBETWEEN函数参数中的最大值也包含在随机结果中,因此最大值参数应该设定为9,而不是10。

当然如果你想生成只含数字的密码,比如生成一个5位数字,你也可以这样操作:

创建随机字母

相较于大家熟知的随机数字,随机字母其实不太常用。创建随机字母,我们需要用到CHAR()函数,通过CHAR()函数将随机产生的10进制数字转换为ANSI码中对应的字符。

规则如下:

因此,大写字母对应的是65~90,而小写字母对应的则是97~122。

由此可见,如果我们要生成一个5位密码,且第一位为小写字母,第二位为数字,第三位为大写字母,第四、第五位又是数字,则可以如此操作:

创建包含随机字母、数字与字符的密码

如果你仔细观察ANSI码,它其实还包含了对于一些特殊字符的定义,比如说感叹号为33,冒号为58。利用这个规则,我们还可以编写一个同时包含字母、数字与字符的随机值。

创建随机长度且包含随机字母、数字与字符的密码

如果你还想进一步挑战难度,你也可以试着创建一个随机长度且包含随机字母、数字与字符的密码。当然,这靠函数有点强人所难,VBA则恰到好处:

Public` `Function` `RandomizeF(Num1 ``As` `Integer``, Num2 ``As` `Integer``)
Dim` `Rand ``As` `String
Application.Volatile
getLen = Int((Num2 + 1 - Num1) * Rnd + Num1)
Do
    ``i = i + 1
    ``Randomize
    ``Rand = Rand & Chr(Int((85) * Rnd + 38))
Loop` `Until` `i = getLen
RandomizeF = Rand
End` `Function

复制上述代码,并在VBA中新建一个模块,将其复制,这样我们就可以在工作表中调用这个RandomizeF函数了。