UUID генераторы

Браузеріңізде UUID жасаңыз: толық кездейсоқ v4, дерекқор үшін v7 немесе детерминистік v5. Бірден 1000-ға дейін, құрылғыңыздан ешқайда жіберілмейді.

Таңдау үшін «Жасау» түймесін басыңыз
Нұсқа
Кеңейтілген опциялар

Басқа біреу жасаған, сіз ешқашан естімеген компьютердегі және ешкімнен рұқсат сұрауды қажет етпейтін, ешқашан қайталанбайтын идентификатор керек пе? Бұл дәл UUID атқаратын жұмыс. Ол таныс 8-4-4-4-12 үлгісіндегі 36 таңба ретінде жазылатын 128 биттік сан және оның бүкіл дизайны олардың екеуінің ешқашан бірдей болмауына негізделген — кімнің қайсысын алатынын ешнәрсе үйлестірмесе де. Бұл тегін генератор оларды браузеріңізде жасайды: «Нұсқа» өрісінен нұсқаны таңдаңыз, «Саны» өрісінде қанша қажет екенін көрсетіңіз де, «Жасау» түймесін басыңыз. Бет жобалардың көпшілігі сұрайтын бір v4 идентификаторымен ашылады, сондықтан бірінші идентификаторды алу үшін тек бір рет басу жеткілікті.

Әрбір идентификаторды браузеріңіз Web Crypto API арқылы жасайды. 4-нұсқа браузер қолдау көрсететін жерде crypto.randomUUID() функциясын, ал басқа жағдайда crypto.getRandomValues() функциясын пайдаланады — бұл Math.random() сияқты JavaScript жалған кездейсоқ функциясы емес, криптографиялық күшті кездейсоқтық көзі. 7-нұсқа алдына 48 биттік миллисекундтық уақыт белгісін, одан кейін сол миллисекунд ішінде өсетін 12 биттік есептегішті, содан кейін 62 кездейсоқ битті қояды — бұл RFC 9562 құжатында сипатталған реттеу әдісі; мыңдаған мәндердің араласып кетпей, рет-ретімен шығуы осы есептегіштің арқасы. 1-нұсқа уақыт белгісін мультикаст биті орнатылған кездейсоқ түйін идентификаторымен біріктіреді, сондықтан ол 1990 жылдардағы бастапқы енгізілімдер сияқты желілік картаңыздың мекенжайын ешқашан тасымалдамайды. 3 және 5-нұсқалар мүлдем кездейсоқ емес: олар есімдер кеңістігін (namespace) атаумен бірге сәйкесінше MD5 және SHA-1 арқылы хэштейді және бұл хэштеу процесі де сіздің құрылғыңызда орындалады. Серверге ештеңе жіберілмейді, ештеңе тіркелмейді және бет жүктелгеннен кейін ол интернет қосылымынсыз да жұмысын жалғастыра береді.

«Нұсқа» — қалғанның бәрін шешетін өріс. 4-нұсқа — 122 кездейсоқ бит және ешқандай құрылым жоқ — бұл әдепкі нұсқа және идентификатор тек бірегей болуы қажет болған кездегі дұрыс жауап. 7-нұсқа 62 кездейсоқ битті сақтайды, бірақ ол жасалған уақытпен басталады, сондықтан олардың жиынтығы жасалған уақыты бойынша сұрыпталады; егер идентификатор дерекқор кілті болатын болса, дәл осы нұсқаны таңдау керек. 1-нұсқа — бұл әлі де талап ететін жүйелер үшін осында сақталған бастапқы уақытқа негізделген схема. 3 және 5-нұсқалар — ерекше жұп: олар детерминистік, яғни бірдей енгізулер әрқашан бірдей идентификатор шығарады. Олар екі қосымша өрісті қажет етеді — стандартты кеңістіктердің бірі (DNS, URL, OID, X.500) немесе өзіңіз көрсеткен «Таңдамалы» бола алатын «Есімдер кеңістігі» және идентификацияланатын жол болып табылатын «Атауы». v5 нұсқасына URL есімдер кеңістігін және https://example.com/a мекенжайын беріңіз, сонда сіз бүгін де, ертең де, басқа біреудің компьютерінде де бірдей UUID аласыз. Осыған байланысты, v3 немесе v5 таңдалғанда «Саны» өрісі жоғалады: бір детерминистік мәннің мың көшірмесі бәрібір бір детерминистік мәннің мың көшірмесі болар еді. Қалған барлық нұсқалар үшін «Саны» 1-ден 1000-ға дейін болады.

Төрт қосқыш негізгі 128 битті өзгертпестен шығыс нәтижесінің пішімін өзгереді. «Бас әріптер» қосқышы оналтылық сандарды үлкен әріптермен басып шығарады, «Дефиссіз» кейбір бағандар мен файл атауларына қажетті ықшам 32 таңбалы пішімді береді, ал «Фигуралық жақшалар» мәнді { } ішіне алады — бұл пішімді Windows және .NET әлемі GUID деп атайды. «Кеңейтілген опциялар» бөліміндегі urn:uuid: оны ресми URN ететін префикс қосады; ол қосылып тұрғанда «Фигуралық жақшалар» және «Дефиссіз» опцияларын өшіреді, өйткені стандарт тек бір URN пішіміне рұқсат береді және ол дефистері бар канондық пішім. «Көшіру пішімі» көшірілген кезде жиынтықтың қалай біріктірілетінін анықтайды: әр жолда біреуден, үтірмен бөлінген, немесе массивке тікелей қоюға арналған әр мән тырнақша ішінде және соңында үтірмен. Нәтиженің астында кездейсоқтықты битпен көрсететін жол орналасқан — v4 үшін 122, v7 үшін 62 — және v7 үшін жиынтықтың бірінші идентификаторында кодталған уақыт белгісі көрсетіледі, осылайша мән ішіндегі уақыт жасырын емес, көрінетін болады. «Барлығын көшіру» және «Файлға сақтау» түймелері «Көшіру пішімі» параметрін ескереді. «Тарих» соңғы 10 жиынтығыңызды өз браузеріңізде сақтайды: оны қайтару үшін біреуін басыңыз, белгілі бір жазбаны көшіріңіз немесе жойыңыз, немесе барлығын тазалаңыз. «Тазалау» түймесі параметрлеріңізге тиіспей нәтижені тазалайды, ал 50 идентификатордан кейін тізім елу жолдың орнына айналдыруға болатын бір блокқа айналады.

Бұл беттегі ең маңызды нәрсе — бастапқы кілт (primary key) ретінде v4 пен v7 арасындағы айырмашылық және бұл талғам мәселесі емес. Дерекқор индекстері — сұрыпталған ретпен сақталатын ағаштар және жаңа кілттің осы ретпен қай жерге түсетіні оны енгізу қанша жұмысқа түсетінін шешеді. v4 кілті кездейсоқ, сондықтан тізбекті енгізулер индекстің бір-біріне байланыссыз бұрыштарына түседі: толық болған беттер бөлінеді, дерекқор жадында сақтайтын ағаш бөліктері сирек келесі енгізуге қажет бөліктер болады, ал индекс ондағы жолдарға қарағанда әлдеқайда үлкен және фрагменттелген болып шығады. v7 кілті ағымдағы миллисекундтан басталады, сондықтан тізбекті енгізулер ағаштың оң жақ шетінде бірге жиналады, бұл автоматты өсетін бүтін сан (auto-incrementing integer) жасайтын үлгі және индекс құрылымдары дәл осы үлгіге негізделіп құрылған. Бүкіл ымыра осында: v7 сізге кез келген қызметтің орталық есептегішсіз идентификатор жасай алу қасиетін (сіздің бастапқыда UUID-ді таңдауыңыздың себебі) сақтай отырып, тізбекті кілтті енгізу мінез-құлқын береді. Мұның құны — жасалу уақыты енді идентификатор ішінде оқылатын болады және оның маңызды не маңызды еместігі форматқа емес, сіздің деректеріңізге байланысты мәселе.

Ешқашан ешнәрсе UUID-ді бірегейлікке тексермейді; оның өлшемі кепілдік болып табылады. Ешқандай тізілім жоқ, серверге сұраныс жіберілмейді, іздеу жасалмайды — генератор санды жасайды да оны сізге береді, ал олардың екеуінің бір-біріне сәйкес келмеуінің себебі жай ғана 2^122 мүмкін болатын 4-нұсқа мәндерінің бар болуы, шамамен 5,3 × 10^36. Туған күн парадоксы мұны бағалаудың ең жақсы жолы: кез келген екеуінің сәйкес келу мүмкіндігі 50% болуы үшін сізге шамамен 2,7 × 10^18 идентификатор қажет болар еді — бұл 86 жыл бойы секундына бір миллиард жаңа UUID деген сөз. Бұл статистиканың нені уәде ететінін және нені етпейтінін нақты білу маңызды. Бұл арифметикалық емес, статистикалық кепілдік және ол оның негізіндегі кездейсоқтық шынайы болғанда ғана өз күшінде болады — нашар инициализацияланған генератор немесе энтропия пулымен бірге клондалған виртуалды машина оны формат байқай алмайтындай етіп бұзады. 7-нұсқа бұл мәселені одан әрі тарылтады: бір миллисекунд ішінде бір генератор өзін мүлдем қайталай алмайды, өйткені есептегіш кездейсоқ сандар бермейді, өседі, ал тәуелсіз генераторлар арасындағы жұмысты 62 кездейсоқ бит атқарады.

UUID құпия сөз емес, идентификатор. 4-нұсқаны болжау мүмкін емес, бұл адамдарды оған құпия ретінде қарауға итермелейді — құпия сөзді қалпына келтіру сілтемесі, болжау мүмкін емес URL, сеанс токені, API кілті. Болжамсыздық шындық, бірақ құпиялық мәннің қалай өңделетініне байланысты, ал идентификаторлар дизайны бойынша ұқыпсыз өңделеді: олар URL мекенжайларында орналасады, олар браузер тарихына, сервер логтарына, Referrer тақырыптары мен аналитикаға түседі және чат хабарламаларына көшіріледі. Басқа нұсқалар одан да нашар үміткерлер. 1-нұсқа және 7-нұсқа екеуі де жасалу сәтін кодтайды, сондықтан оны ұстап тұрған кез келген адам оның қашан жасалғанын шамамен біледі және онымен бірге жасалған барлық нәрсенің аймағын тарылта алады. 3 және 5-нұсқалар әдейі детерминистік етіп жасалған: электрондық пошта мекенжайының v5 UUID мәні хэштелген құпия емес, ол бірдей мекенжайы бар кез келген адам бір секундта есептей алатын мән. UUID-ді нысанға атау беру үшін пайдаланыңыз. Мән белгісіз болып қалуы қажет болғанда құпия сөз генераторын немесе құпияларға арналған кітапхана токенін пайдаланыңыз.

Бұл UUID генераторын неліктен таңдау керек?

UUID-лер атаудың бос екенін ешкім растамас бұрын бір нәрсеге атау беру қажет болған кезде пайда болады. Қолданба коды оларды енгізгісі келетін қатарлар үшін жасайды, осылайша нысан дерекқорға жетпес бұрын идентификаторға ие болады және жазу әлі орындалып жатқанда клиент оған сілтеме жасай алады. Үлестірілген жүйелер оларға көбірек сүйенеді: бір кестеге жазатын бірнеше қызмет, ұшақта желіден тыс жазбалар жасайтын мобильді клиент, өзі өңдеп қойған хабарламаны тануы керек кезек — бұлардың ешқайсысы ортақ есептегішті күте алмайды. 5-нұсқа басқа қажеттілікті қамтиды, бұл сізде бар нәрседен алынған тұрақты идентификатор: бір құжат, бір URL немесе бір тіркелгі әрқашан бірдей UUID мәніне сәйкес келеді, сондықтан импортты ештеңені қайталамай екі рет орындауға болады. Басқа жерлерде олар жай ғана жүйе талап ететін пішім болып табылады — логтар мен трейстер арқылы өтетін корреляция идентификаторы, мыңдаған пайдаланушы жүктеп салған файлдар бір шелекке (bucket) түскенде қайталанбайтын файл атауы, Windows тізілімінің кілті, нақты деректер сияқты көрінуі қажет сынақ деректері.

Бірнеше шынайы шектеулерді білген жөн. Бір топтама — бұл бір нұсқа: «Нұсқа» өрісіндегі мән оның ішіндегі барлық нәрсеге қолданылады, сондықтан v4 және v7 тобы екі бөлек топтама болып табылады. Бұл инспектор емес, генератор — оның нұсқасын немесе уақыт белгісін оқу үшін UUID қою бұл беттің жұмысы емес. «Файлға сақтау» түймесі CSV немесе JSON емес, қарапайым мәтіндік файлды жазады. 7-нұсқа оның қашан жасалғанын миллисекундқа дейін ашық көрсетеді, бұл кемшілік емес, нақты ымыра, ал 1-нұсқа да уақытты дәл осылай көрсетеді; егер бұл сіздің деректеріңіз үшін проблема болса, 4-нұсқа — ешкімге ештеңе айтпайтын нұсқа. Стандарттағы екі арнайы мән нұсқа емес, сондықтан «Нұсқа» өрісінде таңдау ретінде ұсынылмайды, бірақ оларды осы жерден көшіріп алуға болады: nil UUID, 00000000-0000-0000-0000-000000000000 және max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. Бұл беттегі барлық нәрсе 2024 жылы RFC 4122-ні алмастырған RFC 9562 спецификациясына сәйкес келеді, сондықтан нәтижені UUID-мен жұмыс істейтін кез келген кітапхана, дерекқор немесе API қабылдайды. Осы шектеулер аясында кепілдік күшті: әрбір идентификатор стандартқа сай, криптографиялық қауіпсіз кездейсоқтықтан, сіздің өз компьютеріңізде жасалады және оны басқа ешкім ешқашан көрмейді.

FAQ

UUID-ді қалай жасай аламын?

«Нұсқа» өрісінен нұсқаны таңдаңыз, «Саны» өрісінде қанша қажет екенін көрсетіңіз де, «Жасау» түймесін басыңыз. Бет жобалардың көпшілігі сұрайтын бір 4-нұсқа идентификаторымен ашылады, сондықтан қарапайым UUID алу үшін тек бір рет басу жеткілікті. Әрбір мән өзінің көшіру түймесімен бірге пайда болады, ал «Барлығын көшіру» бүкіл жиынтықты бірден алады.

UUID v4 пен v7 арасында қандай айырмашылық бар?

4-нұсқа — ешқандай құрылымы жоқ 122 кездейсоқ бит, сондықтан олардың екеуінің бір-біріне ешқандай қатысы жоқ. 7-нұсқа алғашқы 48 битті ол жасалған миллисекундқа жұмсайды, есептегіш пен 62 кездейсоқ бит қосады, сондықтан оны сұрыптауға болады: жиынтық жасалған ретімен шығады. Идентификатор тек бірегей болуы қажет болғанда v4-ті, ал ол дерекқор кілті болатын кезде v7-ні пайдаланыңыз.

Қай UUID нұсқасын пайдалануым керек?

Басқасын таңдауға себебіңіз болмаса, 4-нұсқаны таңдаңыз. Егер идентификатор бастапқы кілт болса және енгізу (insert) өнімділігі маңызды болса, 7-нұсқаны таңдаңыз. Егер бірдей енгізу әрқашан бірдей идентификатор шығаруы қажет болса, 5-нұсқаны таңдаңыз. Ал өзіңіз сөйлесуіңіз керек жүйе арнайы сұраған жағдайда ғана 1-нұсқаны таңдаңыз. 3-нұсқа — бұл SHA-1 орнына MD5 пайдаланатын 5-нұсқа және ол тек үйлесімділік үшін бар.

Жасалған UUID-лер шынымен кездейсоқ және қауіпсіз бе?

Кездейсоқтық криптографиялық қауіпсіз: ол Math.random() функциясынан емес, браузеріңіздің Web Crypto API арқылы, crypto.randomUUID() немесе crypto.getRandomValues() арқылы келеді. Болжауға келмейтін мағынадағы қауіпсіздік құпия мағынадағы қауіпсіздіктен бөлек мәселе — UUID идентификатор болып табылады және оны құпия сөз, сеанс токені немесе API кілті ретінде пайдаланбау керек.

Бір уақытта көп UUID жасай аламын ба?

Иә, бірден 1000-ға дейін. «Саны» мәнін орнатып, «Жасау» түймесін басыңыз; елу мәннен кейін нәтиже ұзын қатарлар тізімі емес, айналдыруға болатын бір блокқа айналады. «Барлығын көшіру» және «Файлға сақтау» түймелері бүкіл жиынтықты «Көшіру пішімі» көрсеткендей — әр жолда біреуден, үтірмен бөлінген немесе массивке қою үшін тырнақшаға алынған күйде көшіріп алады.

Неліктен v3 және v5 маған әрқашан бірдей UUID береді?

Өйткені олар осы үшін арналған. 3 және 5-нұсқалар детерминистік: олар сіз берген есімдер кеңістігі мен атауды хэштейді, сондықтан бірдей енгізулер кез келген компьютерде және кез келген тілде әрқашан бірдей идентификатор жасайды. Бұл оларды сізде бар нәрседен тұрақты идентификатор алу үшін пайдалы етеді, сол себепті де оларды таңдағанда «Саны» өрісі жасырылады.

Есімдер кеңістігі (Namespace) және Атау (Name) дегеніміз не және қай кеңістікті таңдауым керек?

Олар 3 немесе 5-нұсқа UUID есептелетін екі кіріс деректер. «Есімдер кеңістігі» атаудың қандай түрге жататынын көрсетеді — хост атаулары үшін DNS, мекенжайлар үшін URL, каталог схемалары үшін OID және X.500 немесе өзіңіздің есімдер кеңістігі UUID мәнін бергіңіз келсе «Таңдамалы», бұл қолданба ішіндегі қалыпты таңдау. «Атауы» өрісі — жолдың өзі. Әртүрлі есімдер кеңістігі бір атау үшін мүлдем басқа нәтижелер береді және олардың бар болуының мәні осында.

Неліктен дерекқордың бастапқы кілті үшін UUID v7 v4-тен жақсырақ?

Мәндердің индексте қай жерге түсетініне байланысты. Индекс сұрыпталған ретпен сақталады және кездейсоқ v4 кілті оның кез келген жеріне түседі, сондықтан енгізулер ағаштың барлық жеріндегі беттерді бөледі және жадта сақталған бөліктер сирек келесі қажет болатын бөліктер болады. v7 кілті ағымдағы миллисекундтан басталады, сондықтан тізбекті енгізулер индекстің соңына бірге жиналады, бұл тізбекті бүтін сан кілтінің мінез-құлқы сияқты — сонымен қатар кез келген қызметке орталық есептегіштен сұрамай-ақ идентификатор жасауға мүмкіндік береді.

Екі UUID ешқашан бірдей болуы мүмкін бе?

Принципті түрде иә, іс жүзінде жоқ және қайсысы қайсысы екенін білген жөн. Бірегейлікті ешнәрсе тексермейді: жай ғана 2^122 мүмкін болатын 4-нұсқа мәндері бар, шамамен 5,3 × 10^36, және бір соқтығысу мүмкіндігі 50% болуы үшін сізге шамамен 2,7 × 10^18 идентификатор қажет болар еді — 86 жыл бойы секундына бір миллиард. Кепілдік абсолютті емес, статистикалық және ол кездейсоқтықтың шынайы болуына байланысты, сондықтан бұл генератор қарапайым жалған кездейсоқ функцияның орнына Web Crypto API пайдаланады.

UUID-ді құпия сөз, API кілті немесе сеанс токені ретінде пайдалана аламын ба?

Жоқ, бұл ең көп шығын әкелетін қателік. 4-нұсқа UUID болжау мүмкін емес, бірақ идентификаторлар ашық деректей өңделеді: олар URL мекенжайларында, браузер тарихында, сервер логтарында, Referrer тақырыптарында және аналитикада сақталады. 1 және 7-нұсқалар қосымша олардың қашан жасалғанын көрсетеді, ал 3 және 5-нұсқаларды енгізулерді білетін кез келген адам қайта есептей алады. Құпия сақталуы керек кез келген нәрсе үшін құпия сөз генераторын немесе құпияларға арналған кітапхана токенін пайдаланыңыз.

UUID v7 оның қашан жасалғанын көрсете ме?

Иә, миллисекундқа дейін және бұл қателік емес, әдейі жасалған — v7-ні сұрыптауға мүмкіндік беретін нәрсе осы уақыт белгісі. Нәтиженің астындағы жол топтаманың бірінші мәнінде кодталған уақытты көрсетеді, сондықтан сіз ненің ашық екенін дәл көре аласыз. 1-нұсқа да уақыт белгісін тасымалдайды. Егер жасалу уақыты сіз жариялағыңыз келмейтін нәрсе болса, 4-нұсқа — құрамында ешқандай уақыт жоқ нұсқа.

UUID v1 менің MAC мекенжайымды көрсете ме?

Бұл жерде емес. Бастапқы схема түйін (node) өрісі ретінде машинаның желілік картасының мекенжайын пайдаланды, v1-дің беделі осыдан шыққан, бірақ стандарт мультикаст битімен белгіленген кездейсоқ түйін идентификаторына да рұқсат береді және бұл генератор дәл осылай жасайды. Сіздің аппараттық мекенжайыңыз ешқашан оқылмайды және ешқашан нәтижеде көрсетілмейді.

Бас әріптер, Дефиссіз, Фигуралық жақшалар және urn:uuid: нені өзгертеді?

Тек көрсетілімін — олардың артындағы 128 бит барлық пішімде бірдей. «Бас әріптер» қосқышы оналтылық сандарды үлкен әріптермен басып шығарады, «Дефиссіз» ықшам 32 таңбалы нұсқаны береді, «Фигуралық жақшалар» Windows пен .NET GUID жазатындай мәнді { } ішіне алады, ал urn:uuid: оны ресми URN ететін префикс қосады. urn:uuid: қосулы кезде қалған екеуін өшіреді, өйткені стандарт дәл бір URN пішімін анықтайды және ол дефистері бар канондық пішім.