{"id":18024010,"url":"https://github.com/lete114/simple-unique","last_synced_at":"2025-03-27T00:30:47.698Z","repository":{"id":57689206,"uuid":"470534257","full_name":"Lete114/Simple-Unique","owner":"Lete114","description":"完全随机生成唯一字符串 | Completely random generation of unique strings","archived":false,"fork":false,"pushed_at":"2022-05-03T08:13:41.000Z","size":142,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-18T13:53:37.278Z","etag":null,"topics":["generator","id","simple","unique","unique-id"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Lete114.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-03-16T10:29:19.000Z","updated_at":"2022-11-05T11:36:40.000Z","dependencies_parsed_at":"2022-09-26T20:53:27.139Z","dependency_job_id":null,"html_url":"https://github.com/Lete114/Simple-Unique","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lete114%2FSimple-Unique","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lete114%2FSimple-Unique/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lete114%2FSimple-Unique/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lete114%2FSimple-Unique/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Lete114","download_url":"https://codeload.github.com/Lete114/Simple-Unique/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245760564,"owners_count":20667886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["generator","id","simple","unique","unique-id"],"created_at":"2024-10-30T07:11:39.357Z","updated_at":"2025-03-27T00:30:47.401Z","avatar_url":"https://github.com/Lete114.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"right\"\u003e\n  语言:\n  中文\n  \u003ca title=\"English\" href=\"/README_EN.md\"\u003eEnglish\u003c/a\u003e\n\u003c/div\u003e\n\n\u003ch1 align=\"center\"\u003e\u003ca href=\"https://github.com/lete114/Simple-Unique\" target=\"_blank\"\u003eSimple-Unique\u003c/a\u003e\u003c/h1\u003e\n\u003cp align=\"center\"\u003e完全随机生成唯一字符串 · 超轻量\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/Lete114/Simple-Unique/releases/\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/simple-unique?logo=npm\" alt=\"Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/Lete114/Simple-Unique/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/Lete114/Simple-Unique?color=FF5531\" alt=\"MIT License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## 简介\n\n完全随机生成唯一字符串 · **超轻量**\n\n压缩大小: 180~ Byte\n\ngzip 大小: 150~ bit\n\n## 安装\n\nUsing npm:\n\n```bash\nnpm install simple-unique --save\n```\n\nUsing jsDelivr CDN:\n\n```html\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/simple-unique/dist/unique.min.js\"\u003e\u003c/script\u003e\n```\n\nUsing unpkg CDN:\n\n```html\n\u003cscript src=\"https://unpkg.com/simple-unique/dist/unique.min.js\"\u003e\u003c/script\u003e\n```\n\n## 使用案例\n\n### CLI\n\n你可以全局安装后在终端使用\n\n```bash\nnpm install simple-unique -g\n```\n\n你也可以使用`npx`免安装使用`Simple-Unique`\n\n```bash\nnpx simple-unique\nnpx: installed 1 in 1.82s\n3f7c94zs79\n```\n\n自定义唯一字符串长度\n\n\u003e 请注意，`sunique`是全局安装后，产生的别名，既可以使用`sunique`也可以使用`simple-unique`(推荐`sunique`)\n\n```bash\nsunique --size 20\ny8n69mohr3pmf7vg19to\n```\n\n### Node.js\n\n```js\nconst unique = require('simple-unique')\nconst arr1 = [unique(), unique()]\nconst arr2 = [unique(20), unique(20)]\n\nconsole.log(arr1[0] === arr1[1], arr1) // false [ 'krntrfokkp', '35tftcm3tr' ]\nconsole.log(arr2[0] === arr2[1], arr2) // false [ 'lva8timtvipgbenfjkhj', '9s32qj2chqulqxox7npq' ]\n```\n\n### ES Modules\n\n```js\nimport unique from 'simple-unique'\nconst arr1 = [unique(), unique()]\nconst arr2 = [unique(20), unique(20)]\n\nconsole.log(arr1[0] === arr1[1], arr1) // false [ 'sscya8ri7m', 'nbfrebutok' ]\nconsole.log(arr2[0] === arr2[1], arr2) // false [ 'bcl5371wv3txd3d3a8zt', 'uvt8uiogn2jjbot9b07p' ]\n```\n\n### 浏览器\n\n```html\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/simple-unique/dist/unique.min.js\"\u003e\u003c/script\u003e\n\u003cscript\u003e\n  const arr1 = [unique(), unique()]\n  const arr2 = [unique(20), unique(20)]\n\n  console.log(arr1[0] === arr1[1], arr1) // false [ 'gsf2e7u9fw', 'y2vm3x0tpv' ]\n  console.log(arr2[0] === arr2[1], arr2) // false [ 'l399uakldce29mfev391', '36t375r2uim63wkplz1s' ]\n\u003c/script\u003e\n```\n\n## Simple-Unique VS NanoID\n\n[Simple-Unique](https://github.com/Lete114/Simple-Unique) 与 [NanoID](https://github.com/ai/nanoid) 对比，分别生成`9999999`(一千万)个唯一 id，长度为 10 位数\n\n\u003e 如下结果是在浏览器控制台中进行测试的\n\u003e\n\u003e Simple-Unique 的效率大约是 NanoID 的 7 倍\n\u003e\n\u003e - Simple-Unique: 3775.31591796875 ms (3~5 秒左右)\n\u003e - NanoID: 26226.182861328125 ms (26~28 秒左右)\n\n```js\n// Simple-Unique\nvar SimpleUnique=function(){\"use strict\";return function(n){n=n||10;for(var r=function(){return Math.random().toString(36).slice(2)},t=r();t.length\u003cn;)t+=r();return t.slice(0,n)}}();\n\n// NanoID\nlet NanoID=(t=21)=\u003ecrypto.getRandomValues(new Uint8Array(t)).reduce(((t,e)=\u003et+=(e\u0026=63)\u003c36?e.toString(36):e\u003c62?(e-26).toString(36).toUpperCase():e\u003c63?\"_\":\"-\"),\"\");\n\nconst TenMillion = 9999999\n\nvar SimpleUniqueArray = []\n\nvar NanoIDArray = []\n\n// 测试效率\n// 差不多在3~5秒左右\n// Simple-Unique: 3775.31591796875 ms\nconsole.time('Simple-Unique')\nfor (let index = 0; index \u003c TenMillion; index++) {\n  SimpleUniqueArray.push(SimpleUnique(10))\n}\nconsole.timeEnd('Simple-Unique')\n\n// 测试效率\n// 差不多在26~28秒左右\n// NanoID: 26226.182861328125 ms\nconsole.time('NanoID')\nfor (let index = 0; index \u003c TenMillion; index++) {\n  NanoIDArray.push(NanoID(10))\n}\nconsole.timeEnd('NanoID')\n\n// 测试在生成 9999999(一千万) 后是否存在重复id\n// 使用 Set 对数组去重，最后查看剩余是否是 9999999(一千万)\nconst SimpleUniqueSize = new Set(SimpleUniqueArray).size\nconst NanoIDSize = new Set(NanoIDArray).size\n\n// 如果为true，则表示在 9999999(一千万) 中无重复id\nconsole.log(SimpleUniqueSize === TenMillion, SimpleUniqueSize) // true 9999999\nconsole.log(NanoIDSize === TenMillion, NanoIDSize) // true 9999999\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flete114%2Fsimple-unique","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flete114%2Fsimple-unique","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flete114%2Fsimple-unique/lists"}