Genera identificadors únics resistents a collisions (CUID) per a sistemes distribuïts, bases de dades i aplicacions web. Aquesta eina crea CUID que són escalables, ordenables i altament improbables de col·lisionar.
Genera una ID resistent a col·lisions ràpidament i fàcilment.
Un CUID (Identificador Únic Resistant a Colisions) és un identificador únic dissenyat per ser resistant a colisions, escalable horitzontalment i ordenable de manera seqüencial. Els CUIDs són particularment útils en sistemes distribuïts on cal generar identificadors únics sense coordinació entre nodes.
Un CUID normalment consta dels següents components:
L'estructura exacta pot variar depenent de la implementació del CUID, però aquests components treballen junts per crear un identificador únic i ordenable.
Aquí teniu una representació visual d'una estructura típica de CUID:
Els CUIDs es generen mitjançant una combinació de components basats en el temps i aleatoris. El procés normalment implica:
El CUID resultant normalment es representa com una cadena de lletres i números.
Els CUIDs ofereixen diversos avantatges sobre altres sistemes d'identificadors únics:
Els casos d'ús comuns per als CUIDs inclouen:
Aquí teniu exemples de generació de CUIDs en diversos llenguatges de programació:
1// JavaScript (usant la biblioteca 'cuid')
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (usant la biblioteca 'cuid')
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (usant la gem 'cuid')
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (usant la biblioteca 'com.github.f4b6a3.cuid')
2import com.github.f4b6a3.cuid.Cuid;
3
4public class CuidExample {
5 public static void main(String[] args) {
6 String id = Cuid.createCuid();
7 System.out.println(id);
8 }
9}
10
1// C# (usant el paquet NuGet 'Cuid.Net')
2using Cuid;
3
4class Program
5{
6 static void Main(string[] args)
7 {
8 string id = CuidGenerator.Generate();
9 Console.WriteLine(id);
10 }
11}
12
1// PHP (usant el paquet 'endyjasmi/cuid')
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (usant el paquet 'github.com/lucsky/cuid')
2package main
3
4import (
5 "fmt"
6 "github.com/lucsky/cuid"
7)
8
9func main() {
10 id := cuid.New()
11 fmt.Println(id)
12}
13
1// Swift (usant el paquet 'CUID')
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (usant una implementació personalitzada)
2#include <iostream>
3#include <chrono>
4#include <random>
5#include <sstream>
6#include <iomanip>
7
8std::string generateCUID() {
9 auto now = std::chrono::system_clock::now();
10 auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
11 auto value = now_ms.time_since_epoch();
12 long duration = value.count();
13
14 std::random_device rd;
15 std::mt19937 gen(rd());
16 std::uniform_int_distribution<> dis(0, 35);
17
18 std::stringstream ss;
19 ss << 'c';
20 ss << std::hex << std::setfill('0') << std::setw(8) << duration;
21 for (int i = 0; i < 8; i++) {
22 int r = dis(gen);
23 ss << (char)(r < 10 ? '0' + r : 'a' + r - 10);
24 }
25 return ss.str();
26}
27
28int main() {
29 std::string id = generateCUID();
30 std::cout << id << std::endl;
31 return 0;
32}
33
1% MATLAB (usant una implementació personalitzada)
2function id = generateCUID()
3 timestamp = dec2hex(round(posixtime(datetime('now'))*1000), 8);
4 random = '';
5 for i = 1:8
6 random = [random char(randi([48 57 97 122]))];
7 end
8 id = ['c' timestamp random];
9end
10
11% Ús
12id = generateCUID();
13disp(id);
14
1## R (usant una implementació personalitzada)
2library(lubridate)
3
4generate_cuid <- function() {
5 timestamp <- format(as.numeric(now()) * 1000, scientific = FALSE)
6 timestamp <- substr(timestamp, 1, 8)
7 random <- paste0(sample(c(0:9, letters[1:6]), 8, replace = TRUE), collapse = "")
8 paste0("c", timestamp, random)
9}
10
11## Ús
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (usant una implementació personalitzada)
2Function GenerateCUID() As String
3 Dim timestamp As String
4 Dim random As String
5 Dim i As Integer
6
7 timestamp = Right("00000000" & Hex(CLng(CDbl(Now()) * 86400000)), 8)
8
9 For i = 1 To 8
10 random = random & Mid("0123456789abcdef", Int(Rnd() * 16) + 1, 1)
11 Next i
12
13 GenerateCUID = "c" & timestamp & random
14End Function
15
16' Ús en una cel·la
17'=GenerateCUID()
18
Els CUIDs van ser desenvolupats originalment per Eric Elliott el 2012 com una solució al problema de generar identificadors únics en sistemes distribuïts. El concepte es va inspirar en el sistema d'ID de Snowflake de Twitter, però dissenyat per ser més fàcil d'implementar i utilitzar a través de diverses plataformes.
El desenvolupament dels CUIDs va ser impulsat per la necessitat d'un sistema d'ID simple i resistant a colisions que pogués funcionar a través de diferents llenguatges de programació i entorns. L'objectiu d'Elliott era crear un sistema que fos fàcil d'implementar, que no requerís coordinació central i que pogués escalar horitzontalment.
Des de la seva creació, els CUIDs han passat per diverses iteracions i millores:
L'evolució dels CUIDs reflecteix les necessitats canviants dels sistemes distribuïts i els esforços continus per equilibrar la simplicitat, la seguretat i el rendiment en la generació d'identificadors únics.
Aquest eina generadora de CUID us permet generar ràpidament CUIDs per als vostres projectes. Simplement feu clic al botó "Generar" per crear un nou CUID, i utilitzeu el botó "Copiar" per copiar-lo al vostre portapapers per a un ús fàcil a les vostres aplicacions.
Descobreix més eines que podrien ser útils per al teu flux de treball