JS通过ASCII码值实现随机字符串的生成(可指定长度以及解决首位不出现数值)
在之前写过一篇“JS实现随机生成字符串(可指定长度)”,当时写的过于简单和传统,比较粗放。此次针对此问题,对随机生成字符串的功能进行优化处理,对随机取到的字符都通过程序自动来完成。
在写之前,我们先了解下String.charCodeAt、Array.from()、String.fromCharCode等方法,以及随机获取指定范围中的值,这些在此次功能优化中起到关键作用。
一、String.charCodeAt
获取指定下标的字符的ASCII码(Unicode)。
返回值:0~65535之间的整数
语法:
string.charCodeAt(index)
参数:index:指定字符的下标
示例:
console.log('a'.charCodeAt(0))
console.log('z'.charCodeAt(0))
console.log('A'.charCodeAt(0))
console.log('Z'.charCodeAt(0))// 运行结果:
97
122
65
90
通过上述输出,得出结论是a~z的ASCII码为97~122,A~Z的ASCII码为65~90。
二、Array.from
Array.from() 方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。
语法:
Array.from(arrayLike[, mapFn[, thisArg]])
这里通过Array.from生成一个1~10的数值元素的数组。示例如下:
console.log(Array.from({length: 10}, (_, index) => index + 1))// 运行结果:
[1, 2, 3, 4, 5,6, 7, 8, 9, 10
]
三、String.fromCharCode
该函数属于String对象,所有主流浏览器均支持该函数。
语法:
String.fromCharCode( [code1 [, code2 [, codes... ]]] )
String.fromCharCode()函数属于静态函数,而且只能够通过全局String对象进行调用,不能通过String对象的实例进行调用。
接下来我们将通过String.fromCharCode,并结合Array.from方法,将97~122,65~90转换为字母。示例如下:
// 生成小写字母的ASCII码
const codesLower = Array.from({length: 26}, (_, index) => 65 + index)
// 生成大写字母的ASCII码
const codesCapital = Array.from({length: 26}, (_, index) => 97 + index)
// 输出小写ASCII码
console.log(codesLower)
// 输出大写ASCC码
console.log(codesCapital)
// 转换为小写字母
console.log(String.fromCharCode(...codesLower))
// 转换为大写字母
console.log(String.fromCharCode(...codesCapital))// 运行结果:
[65, 66, 67, 68, 69, 70, 71, 72,73, 74, 75, 76, 77, 78, 79, 80,81, 82, 83, 84, 85, 86, 87, 88,89, 90
]
[97, 98, 99, 100, 101, 102,103, 104, 105, 106, 107, 108,109, 110, 111, 112, 113, 114,115, 116, 117, 118, 119, 120,121, 122
]
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
如上所示,我们可以通过获取随机的ASCII码值,来生成随机字符串(包含字母+数值)。
四、随机获取指定范围的值
要想随机获取指定范围的值,我们需要先定义一个函数,用于随机获取0~9,65~90,97~122之间的值。示例代码如下:
// 随机值
const randomCode = (min, max) => Math.floor(Math.random() * (max - min)) + minconsole.log(randomCode(0, 10))// 运行结果:
1
由于使用的是Math.floor为向下取值,所以0~10获取到的值范围为 0<= x < 10,所以最大值是10,而不是9。如果写0~9则无法取到9的值。
五、生成ASCII码序列值
我们先使用Array.from将0~9, 65~90, 97~122的ASCII码值生成出来。示例如下:
// 生成序列值
const generatorSequence = (_len, _start) => Array.from({length: _len}, (_, index) => _start + index)
// 生成ASCII码
const ASCCodes= [...generatorSequence(10, 0),...generatorSequence(26, 65),...generatorSequence(26, 97)
]console.log(ASCCodes)// 运行结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 65, 66,67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,121, 122
]
六、生成随机字符串
接下来通过随机取值函数randomIndex()方法,生成ASCCodes数组的索引值,取出对应索引的值。示例如下:
// 生成序列值
const generatorSequence = (_len, _start) => Array.from({length: _len}, (_, index) => _start + index)
// 生成ASCII码
const ASCCodes = [...generatorSequence(10, 0),...generatorSequence(26, 65),...generatorSequence(26, 97)
]
// 随机值
const randomIndex = (min, max) => Math.floor(Math.random() * (max - min)) + min
// 定义获取随机字符 函数
const getRandomStr = () => {const value = ASCCodes[randomIndex(0, ASCCodes.length)]return value > 9 ? String.fromCharCode(value) : value
}
// 定义 生成随机值 函数
const generatorRandomStr = (_len) => {return Array.from({length: _len}, (_, index) => {return getRandomStr()}).join('')
}
// console.log(ASCCodes)
console.log(generatorRandomStr(50))// 运行结果:
9MBz2VGbpTFE4M3V8TeswAWdTEliwvgGhODQQFjaiLE2Hr0DGC
七、处理首位数值问题
如上述结果可见,字符串首位可能会出现数值情况。希望首位不会出现数值,在生成时可作简单调整即可。示例如下:
// 生成序列值
const generatorSequence = (_len, _start) => Array.from({length: _len}, (_, index) => _start + index)
// 生成ASCII码
const ASCCodes = [...generatorSequence(10, 0),...generatorSequence(26, 65),...generatorSequence(26, 97)
]
// 随机值
const randomIndex = (min, max) => Math.floor(Math.random() * (max - min)) + min
// 定义获取随机字符 函数
const getRandomStr = (index) => {const value = ASCCodes[randomIndex(0, ASCCodes.length)]// 如果为首位,并且取到的值小于等于9,则为数字,重新获取if (index === 0 && value <= 9) return getRandomStr(index)return value > 9 ? String.fromCharCode(value) : value
}
// 定义 随机生成字符串
const generatorRandomStr = (_len) => {return Array.from({length: _len}, (_, index) => {return getRandomStr(index)}).join('')
}
// console.log(ASCCodes)
console.log(generatorRandomStr(50))// 运行结果:
BqpwIAvYHpKjvbfsgxfk4YVNzpkFRoK3CYOIWq2IGfDcjazuUF
此篇就先讲到这,希望对大家有所帮助~
相关文章:
JS通过ASCII码值实现随机字符串的生成(可指定长度以及解决首位不出现数值)
在之前写过一篇“JS实现随机生成字符串(可指定长度)”,当时写的过于简单和传统,比较粗放。此次针对此问题,对随机生成字符串的功能进行优化处理,对随机取到的字符都通过程序自动来完成。 在写之前ÿ…...
速通Docker === 快速部署Redis主从集群
目录 镜像仓库介绍 持久化你的数据库 连接到其他容器 创建自定义网络 部署主节点 部署从节点 验证部署 总结 在现代应用架构中,Redis作为一个高性能的内存数据库,被广泛应用于缓存、会话存储、实时分析等多个领域。为了提高Redis的可用性和数据的…...
论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(一)
Understanding Diffusion Models: A Unified Perspective(一) 文章概括引言:生成模型背景:ELBO、VAE 和分层 VAE证据下界(Evidence Lower Bound)变分自编码器 (Variational Autoencoders&#x…...
stm32使用MDK5.35时遇到*** TOOLS.INI: TOOLCHAIN NOT INSTALLED
mdk5.35出现*** TOOLS.INI: TOOLCHAIN NOT INSTALLED的问题!!!! 以管理员身份重新打开MDK5.35.0.0,用keygen破解密码,但是一直提示我是没有破解成功。 解决办法: target 改成ARM...
在Ubuntu上安装RabbitMQ教程
1、安装erlang 因为rabbitmq是基于erlang开发的,所以要安装rabbitmq,首先需要安装erlang运行环境 apt-get install erlang执行命令查是否安装成功:erl,疯狂 Ctrlc 就能退出命令行 2、安装rabbitmq 1、查看erlang与rabbitmq版本…...
【算法】集合List和队列
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 零:集合,队列的用法 一:字母异位词分组 二:二叉树的锯…...
uniapps使用HTML5的io模块拷贝文件目录
最近在集成sqlite到uniapp的过程中,因为要将sqlite数据库预加载,所以需要使用HTML5的plus.io模块。使用过程中遇到了许多问题,比如文件路径总是解析不到等。尤其是应用私有文档目录’_doc’。 根据官方文档: 为了安全管理应用的…...
css‘s hover VS mobile
.animation {animation: 30s move infinite linear;/* &:hover {animation-play-state: paused;*/ }原本写的好好的,测试说:“移动端点击滚动条,跳转到其他页面后,返回当前页面,滚动条不滚动;可以优化位…...
工业制造离不开的BOM
在制造业的浩瀚星空中,物料清单(BOM)犹如“北极星”,牢牢指引着产品从设计蓝图迈向实物诞生的全过程。 BOM的分类 按照设计制造的不同阶段,将BOM划分为设计BOM、工艺BOM、制造BOM三种类型。 设计BOM Engineering BO…...
HTML中的`<!DOCTYPE html>`是什么意思?
诸神缄默不语-个人CSDN博文目录 在学习HTML时,我们经常会看到HTML文档的开头出现<!DOCTYPE html>,它是HTML文件的第一行。很多初学者可能会疑惑,为什么需要这行代码?它到底有什么作用呢?在这篇文章中࿰…...
C语言之斗地主游戏
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 C语言之斗地主游戏 目录 程序概述程序设计 Card类CardGroup类Player类LastCards类Land…...
【玩转全栈】----Django制作部门管理页面
目录 大致效果 BootStrap BootStrap简介 BootStrap配置 BootStrap使用 基本配置 部分代码解释及注意: 用户编辑: 新添数据: 删除数据: 大致效果 我先给个大致效果,基本融合了Django、Bootstrap、css、html等等。 基于D…...
Unreal Engine 5 C++ Advanced Action RPG 十章笔记
第十章 Survival Game Mode 2-Game Mode Test Map 设置游戏规则进行游戏玩法 生成敌人玩家是否死亡敌人死亡是否需要刷出更多 肯定:难度增加否定:玩家胜利 流程 新的游戏模式类游戏状态新的数据表来指定总共有多少波敌人生成逻辑UI告诉当前玩家的敌人波数 3-Survival Game M…...
学习ASP.NET Core的身份认证(基于JwtBearer的身份认证9)
测试数据库中只有之前记录温湿度及烟雾值的表中数据较多,在该数据库中增加AppUser表,用于登录用户身份查询,数据库表如下所示: 项目中安装SqlSugarCore包,然后修改控制器类的登录函数及分页查询数据函数ÿ…...
缓存之美:万文详解 Caffeine 实现原理(上)
由于社区最大字数限制,本文章将分为两篇,第二篇文章为缓存之美:万文详解 Caffeine 实现原理(下) 大家好,我是 方圆。文章将采用“总-分-总”的结构对配置固定大小元素驱逐策略的 Caffeine 缓存进行介绍&…...
Spark/Kafka
文章目录 项目地址一、Spark1. RDD1.1 五大核心属性1.2 执行原理1.3 四种创建方式二、Kafka2.1 生产者(1)分区器(2)生产者提高吞吐量(3) 生产者数据可靠性数据传递语义幂等性和事务数据有序2.2 Broker(1)Broker工作流程(2)节点服役和退役2.3 副本(1)Follower故障细…...
深入浅出:Go语言中的Unicode与字符编码详解
深入浅出:Go语言中的Unicode与字符编码详解 引言 在当今的编程世界中,字符编码和Unicode是不可或缺的技术基础。Go语言作为一种强大的编程语言,其对Unicode的支持和字符编码的处理方式,对于开发者来说至关重要。本文将从Unicode的基础知识入手,逐步深入探讨Go语言中字符编…...
什么是SSL及SSL的工作流程
什么是 SSL SSL(Secure Sockets Layer,安全套接层)是一种保护互联网通信安全的加密协议,用于确保数据在客户端和服务器之间传输时的保密性、完整性和身份验证。它已被TLS(Transport Layer Security,传输层安全协议)取代,但很多场景仍习惯称其为SSL。 SSL/TLS 的主要目…...
.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...
AD7606, 逐次逼近型ADC以及一次被GPT坑了的过程.
首先, 我的项目中, 已有的一个ADC芯片, 8通道, 并行, Analog家的ad7606, 在采集高速的正弦信号的时候, 我发现采集到的值怎么都不太对. 但是宏观来看, 并没有太大问题, 首先我怀疑的是量程问题, 接入一个5伏直流, 得到的读数确实是接近16bit的正半量程的读数, 32xxx. 接着我用信…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
