一个生成4种UUID的Typescript代码(不依赖任何库)

最近写个uni-app前端,由于要兼容小程序环境,标准几个npm里的库都不能用了。看了下网上的uuid js库,再加上short-uuid的源码。一并输入GPT敲打了几个来回后,得到这样的代码:

uuid.ts

enum UUIDFormat {CookieBase90,FlickrBase58,UUID25Base36
}const constants = {[UUIDFormat.CookieBase90]:"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&'()*+-./:<=>?@[]^_`{|}~",[UUIDFormat.FlickrBase58]: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ',[UUIDFormat.UUID25Base36]: '0123456789abcdefghijklmnopqrstuvwxyz'
}/*** Calculate length for the shortened ID* @param {number} alphabetLength* @returns {number}*/
const getShortIdLength = (alphabetLength: number): number =>Math.ceil(Math.log2(Math.pow(2, 128)) / Math.log2(alphabetLength))/*** Convert a hex string to a custom base string* @param {string} hex* @param {string} alphabet* @returns {string}*/
const hexToCustomBase = (hex: string, alphabet: string): string => {const base = alphabet.lengthlet num = BigInt(`0x${hex}`)let encoded = ''while (num > 0) {encoded = alphabet[Number(num % BigInt(base))] + encodednum = num / BigInt(base)}return encoded
}interface PaddingParams {shortIdLength: numberconsistentLength: booleanpaddingChar: string
}/*** Takes a UUID, strips the dashes, and translates to custom base* @param {string} longId* @param {string} alphabet* @param {PaddingParams} [paddingParams]* @returns {string}*/
const shortenUUID = (longId: string, alphabet: string, paddingParams?: PaddingParams): string => {const hex = longId.replace(/-/g, '')const translated = hexToCustomBase(hex, alphabet)if (!paddingParams || !paddingParams.consistentLength) return translatedreturn translated.padStart(paddingParams.shortIdLength, paddingParams.paddingChar)
}/*** Generate a standard UUID* @returns {string}*/
const generateUUID = (): string => {const hexDigits = '0123456789abcdef'const s: string[] = Array(36).fill('')for (let i = 0; i < 36; i++) {s[i] = hexDigits.charAt(Math.floor(Math.random() * 0x10))}s[14] = '4's[19] = hexDigits.charAt((parseInt(s[19], 16) & 0x3) | 0x8)s[8] = s[13] = s[18] = s[23] = '-'return s.join('')
}/*** Generate a UUID in either standard or short format based on the provided format* @param {UUIDFormat} [format] - Enum to specify the desired format* @returns {string}*/
const uuid = (format?: UUIDFormat): string => {const standardUUID = generateUUID()if (format === undefined) {return standardUUID}const useAlphabet = constants[format]const shortIdLength = getShortIdLength(useAlphabet.length)const paddingParams: PaddingParams = {shortIdLength,consistentLength: true,paddingChar: useAlphabet[0]}return shortenUUID(standardUUID, useAlphabet, paddingParams)
}export { uuid, UUIDFormat }

测试:

console.log(uuid()) // 原版

console.log(uuid(UUIDFormat.CookieBase90)) // 可打印字符集版(20字符)

console.log(uuid(UUIDFormat.FlickrBase58)) //大小写压缩版(22字符)

console.log(uuid(UUIDFormat.UUID25Base36)) //小写数字压缩版(25字符)

输出:

fe6eee2b-f3bb-4afb-b6d1-427829aa2720
otDc4[?2Wo5JYd*F=AME
fV8nBAawjXG9dfQJvnmx6w
d4vid4vf6usa9bga6awv0jjja

奈斯~,通用4个场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/42853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型推理加速调研(框架、方法)

大模型推理加速的目标是高吞吐量、低延迟。吞吐量为一个系统可以并行处理的任务量。延时&#xff0c;指一个系统串行处理一个任务时所花费的时间。调研了一些大模型推理的框架。 框架llama.cpprtp-llmvllmTensorRT-LLMLMDeployfastllm语言Chttps://github.com/ggerganov/llama…

SpringBoot项目——送水管理系统

1、导入坐标 坐标作用pagehelper-spring-boot-startermybatis分页插件spring-boot-starter-thymeleafJSP模板引擎mybatis-spring-boot-startermybatisspring-boot-starter-webwebspring-boot-starter-testtestlombok不需要再写getter、setter或equals方法&#xff0c;只要有一…

通过,注解@value,读取配置文件中的数据(并设置默认值)

1.定义配置类 import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component;/*** lecheng云相关配置*/ Component Data Re…

3D问界—什么是blender,与MAYA有什么区别

问题提出&#xff1a;什么是blender&#xff0c;与MAYA有什么区别 Blender 是一个开源的、免费的 3D 建模和动画软件&#xff0c;广泛应用于各种领域。它提供了丰富的功能和工具&#xff0c;适用于从业余爱好者到专业艺术家的不同需求。 1. Blender 的主要用途和功能 属 性描述…

Vue2基础 13:内置指令

内置指令 1 指令梳理2 补充指令2.1 v-text2.2 v-html2.3 v-cloak案例--延迟引入vue造成js阻塞 2.4 v-once案例--点击按钮1并展示初始的值 2.5 v-pre 1 指令梳理 前面几节的基础学习已经用到了部分的指令&#xff0c;先梳理一下。 指令描述v-bind单向绑定解析表达式&#xff0…

零件机加工行业数字化转型,HSMES助您一臂之力!

由于刀具磨损、切削参数不合适以及机床老化等问题&#xff0c;导致加工效率低下&#xff1b;随着产品精度的不断提高&#xff0c;对加工技术的要求也越来越高。然而&#xff0c;许多企业缺乏先进的加工技术和经验&#xff0c;导致产品质量不稳定&#xff0c;难以满足客户需求&a…

解决Spring Boot中的安全漏洞与防护策略

解决Spring Boot中的安全漏洞与防护策略 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. Spring Boot安全漏洞的现状与挑战 在当今软件开发中&#xff0c;安全性是至关重要的一环。Spring Boot作…

定制化的 CSS 魔法:WebKit 处理 CSS 变量的深度解析

定制化的 CSS 魔法&#xff1a;WebKit 处理 CSS 变量的深度解析 CSS 变量&#xff0c;也称为自定义属性&#xff0c;为开发者提供了一种强大的方法来管理样式表中的值。它们允许开发者定义可重用的属性值&#xff0c;然后在样式表中多次引用这些值。WebKit&#xff0c;作为支持…

高项论文老是过不了!换种方法与思路…

2024年上半年信息系统项目管理师成绩公布后&#xff0c;许多考生的论文成绩都不理想&#xff0c;很多人得了30多分&#xff0c;及格线上的考生大多只有45、46分&#xff0c;而50分以上的考生似乎并不多。以下应该是许多考生的心声&#xff1a; 每次都是论文不及格&#xff0c;…

蚂蚁全媒体总编刘鑫炜谈新媒体时代艺术家如何创建及提升个人品牌

新媒体时代艺术家如何创建及提升个人品牌形象——专访蚂蚁全媒体总编刘鑫炜 图为蚂蚁全媒体总编刘鑫炜 在新媒体风潮席卷全球的今天&#xff0c;传统艺术与新媒体技术的融合越来越紧密。这种变革不仅改变了艺术作品的呈现方式&#xff0c;也给艺术家们提供了更多的可能性。那么…

相机、镜头基础知识及硬件选型介绍

工业相机基础知识 1.相机Binning(图像读出模式)功能:将相邻的几个像素合并成一个像素,其优点如下:1)可提高信噪比至sqr(mn)倍;2)可提高帧速至mn倍;3)可提高像素响应度。 2.相机芯片中定义1英寸=16mm,不等于25.4mm 3.相机的作用及基本成像过程:通过光电反应将光…

排序规则collation相关报错信息整理

排序规则collation相关报错信息整理 使用场景报错 1&#xff0c; GAUSS-00058: “collations are not supported by type %s” 错误原因&#xff1a;collation与类型不匹配&#xff0c;类型问题。 解决办法&#xff1a;用户检查语句中的类型&#xff0c;collate仅支持字符相关…

MySQL NULL 值处理

MySQL NULL 值处理 引言 在MySQL数据库中,NULL值是一个特殊的概念,它代表一个未知的或不确定的值。正确处理NULL值对于保证数据库的准确性和查询的有效性至关重要。本文将详细介绍MySQL中NULL值的处理方法,包括在查询、插入、更新和比较操作中的注意事项。 目录 NULL值的…

【社招】【天翼云】基础测试中心招聘总览

一、研发专家&#xff08;平台架构&#xff09; 二、高级后端开发&#xff08;平台开发方向&#xff09; 三、高级前端开发工程师 四、高级产品经理 五、高性能网络测试工程师 六、操作系统测试工程师 七、DPU测试工程师 非猎头&#xff0c;合同制&#xff0c;可以发邮箱&…

【SOLID原则前端中的应用】接口隔离原则(Interface Segregation Principle,ISP)- vue3示例

接口隔离原则&#xff08;Interface Segregation Principle&#xff0c;ISP&#xff09;在Vue 3中的应用 接口隔离原则&#xff08;Interface Segregation Principle&#xff0c;ISP&#xff09;规定&#xff0c;客户端不应该被迫依赖于它不使用的方法。 换句话说&#xff0c;…

图形编辑器基于Paper.js教程07:鼠标画直线或移动路径

探索Paper.js: 使用鼠标绘制直线和轨迹 在数字图形设计和Web应用开发中&#xff0c;提供一个直观和互动的界面供用户绘制图形是极为重要的。Paper.js是一款功能强大的JavaScript库&#xff0c;它使得在HTML5 Canvas上绘制矢量图形变得简单快捷。本文将介绍如何使用Paper.js实现…

ubuntu cp 命令 拷贝文件

基本语法&#xff1a; cp [options] source destination source&#xff1a;源文件或目录 destination&#xff1a;目标文件或目录。如果是目录&#xff0c;则会将源文件复制到该目录下&#xff0c;并保持原有文件名。 以下是一些常用的cp命令选项&#xff1a; -f&#xff1…

DynamoDB常用权限分类详解

DynamoDB是AWS提供的一种完全托管的NoSQL数据库服务。为了确保数据的安全性和访问控制,AWS提供了一套细粒度的权限管理机制。本文将详细介绍DynamoDB的常用权限分类,并提供相应的JSON策略示例。 1. 表级权限 表级权限控制对整个DynamoDB表的访问。 1.1 读取权限 允许用户…

LT86101UXE 国产原装 HDMI2.0 / DVI中继器方案 分辨率 4Kx2K 用于多显示器 DVI/HDMI电缆扩展模块

1. 描述 Lontium LT86101UXE HDMI2.0 / DVI中继器特性高速中继器符合HDMI2.0/1.4规范,最大6 gbps高速数据率、自适应均衡RX输入和pre-emphasized TX输出支持长电缆应用程序,没有晶体在船上保存BOM成本,内部灵活的PCB TX巷交换路由。 LT86101UXE HDMI2.0/DVI中继器自动检测线缆损…

新时代【机器学习】与【Pycharm】:【随机数据生成】与智能【股票市场分析】

目录 第一步&#xff1a;准备工作 1.1 安装必要的库 小李的理解&#xff1a; 1.2 导入库 小李的理解&#xff1a; 第二步&#xff1a;生成和准备数据 2.1 生成随机股票数据 小李的理解&#xff1a; 2.2 数据探索与可视化 小李的理解&#xff1a; 2.3 数据处理 小李…