Tạo các định danh duy nhất chống va chạm (CUID) cho các hệ thống phân tán, cơ sở dữ liệu và ứng dụng web. Công cụ này tạo ra các CUID có thể mở rộng, có thể sắp xếp và rất khó xảy ra va chạm.
Tạo một ID chống va chạm nhanh chóng và dễ dàng.
CUID (Collision-resistant Unique IDentifier) là một định danh duy nhất được thiết kế để chống va chạm, có thể mở rộng theo chiều ngang và có thể sắp xếp theo thứ tự tuần tự. CUID đặc biệt hữu ích trong các hệ thống phân tán, nơi cần tạo ra các định danh duy nhất mà không cần phối hợp giữa các nút.
Một CUID thường bao gồm các thành phần sau:
Cấu trúc chính xác có thể thay đổi tùy thuộc vào việc triển khai CUID, nhưng các thành phần này làm việc cùng nhau để tạo ra một định danh duy nhất và có thể sắp xếp theo thứ tự.
Dưới đây là một hình ảnh minh họa cho cấu trúc CUID điển hình:
CUID được tạo ra bằng cách sử dụng sự kết hợp của các thành phần dựa trên thời gian và ngẫu nhiên. Quá trình thường bao gồm:
CUID kết quả thường được biểu diễn dưới dạng một chuỗi các chữ cái và số.
CUID mang lại nhiều lợi thế hơn các hệ thống định danh duy nhất khác:
Các trường hợp sử dụng phổ biến cho CUID bao gồm:
Dưới đây là các ví dụ về việc tạo CUID trong các ngôn ngữ lập trình khác nhau:
1// JavaScript (sử dụng thư viện 'cuid')
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (sử dụng thư viện 'cuid')
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (sử dụng gem 'cuid')
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (sử dụng thư viện '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# (sử dụng gói 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 (sử dụng gói 'endyjasmi/cuid')
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (sử dụng gói '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 (sử dụng gói 'CUID')
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (sử dụng một triển khai tùy chỉnh)
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 (sử dụng một triển khai tùy chỉnh)
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ử dụng
12id = generateCUID();
13disp(id);
14
1## R (sử dụng một triển khai tùy chỉnh)
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ử dụng
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (sử dụng một triển khai tùy chỉnh)
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ử dụng trong một ô
17'=GenerateCUID()
18
CUID được phát triển lần đầu bởi Eric Elliott vào năm 2012 như một giải pháp cho vấn đề tạo ra các định danh duy nhất trong các hệ thống phân tán. Khái niệm này được lấy cảm hứng từ hệ thống ID Snowflake của Twitter nhưng được thiết kế để dễ dàng triển khai và sử dụng trên nhiều nền tảng khác nhau.
Sự phát triển của CUID được thúc đẩy bởi nhu cầu về một hệ thống ID đơn giản, chống va chạm có thể hoạt động trên các ngôn ngữ lập trình và môi trường khác nhau. Mục tiêu của Elliott là tạo ra một hệ thống dễ triển khai, không cần phối hợp trung tâm và có thể mở rộng theo chiều ngang.
Kể từ khi ra đời, CUID đã trải qua nhiều lần cải tiến và phát triển:
Sự phát triển của CUID phản ánh nhu cầu thay đổi của các hệ thống phân tán và những nỗ lực liên tục để cân bằng giữa sự đơn giản, an toàn và hiệu suất trong việc tạo ra các định danh duy nhất.
Công cụ tạo CUID này cho phép bạn nhanh chóng tạo ra CUID cho các dự án của mình. Chỉ cần nhấp vào nút "Tạo" để tạo một CUID mới, và sử dụng nút "Sao chép" để sao chép nó vào clipboard của bạn để dễ dàng sử dụng trong các ứng dụng của bạn.
Khám phá thêm các công cụ có thể hữu ích cho quy trình làm việc của bạn