实战笔记:从一个按钮到全能生成器,随机数功能的“进化论”
这个工具是我的图腾,还记得我之前提到的吗?2018 年,“豆子工具”的初版只有一个功能:点一下按钮,生成一个随机数。 那时候的代码逻辑极其简单,甚至算不上一个“工具”。但随着这几年自己在开发、运维过程中不断遇到“需要一个复杂密码”、“需要一个 16 位纯金钥”或者“需要一个全大写 ID”等实际场景,我发现简单的随机数其实并不简单。 痛点:单一随机数的局限 早期的随机数功能非常死板,生成的格式往往不是我想要的。每次生成后,我可能还需要手动去改长度、改大小写,甚至手动补上特殊字符。 作为一个开发者,如果一个工具不能让我“一键到位”,那就是不合格的。 进化:高度自定义的“融合模式” 于是,我把这些年所有关于“随机”的需求全部揉碎、重组,将它升级成了一个全能的生成器。 现在的随机数功能,不再是盲目地随机,而是基于规则的精准生成。我为其设计了一套组合逻辑: 长度自定义:不再局限于几位数字,用户可以根据需求自由输入长度。 字符集自由组合: 纯数字:适用于验证码类场景。 纯字母:适用于临时 ID 或变量命名。 字母+数字:兼顾强度与易读性。 含特殊字符:专门为高强度随机密码设计。 结果格式化: 支持结果一键转大写或转小写。这在配置某些特定系统的 API Key 时非常有用,省去了手动切换输入法的麻烦。 我经常使用它生成一些随机数作为密码,密钥。我不用去数长度,或者生成后,我简单调整一下,让它有一点意义,我再去使用。 它使用小程序本地实现,下面是一段核心代码,描述了如何去实现随机数: // 生成随机字符串 genRndStr(rtype) { const that = this; if (utils.isEmpty(that.data.input1)) { wx.showToast({ title: '内容为空', }) return } let result = ''; switch (rtype) { case 1: // 纯数字 result = utils.randNumber(that.data.input1); break; case 2: // 纯字母 result = utils.randLetter(that.data.input1); break; case 3: // 字母和数字 result = utils.randStr(that.data.input1); break; case 4: // 含特殊字符 result = utils.randSymbol(that.data.input1); break; } that.setData({ result1: result }) }, 思考:小功能里的“产品观” 虽然随机数在技术实现上只是简单的字符数组随机采样,但从产品角度看,它体现了一种**“减少用户操作”**的原则。 ...