Python tạo id duy nhất từ ​​​​chuỗi

Một ràng buộc chỉ mục duy nhất trên trường sẽ đảm bảo rằng các giá trị trùng lặp không được phép. Có một số cách để làm điều này. ID sẽ là tuần tự hay ngẫu nhiên?

Nếu là tuần tự, tất cả các hoạt động lưu của bạn nơi ID được tạo phải nằm trong các khối giao dịch. hoạt động ORM như. last() có ích để xác định ID khả dụng tiếp theo.  

Một tùy chọn cần xem xét là tách ID thành hai trường mô hình, một cho tiền tố 3 ký tự và trường thứ hai cho hậu tố số. "ID" sau đó sẽ được trình bày cho người dùng cuối dưới dạng nối của hai trường. Làm điều này cung cấp hai lợi thế. Tìm kiếm theo chuỗi văn bản chậm hơn so với tìm kiếm bằng số. Một ID do người dùng cung cấp sau đó được tìm kiếm trong DB bằng cách sử dụng hai trường sau khi được phân tách dễ dàng bằng Python, tận dụng lợi thế của việc lập chỉ mục kiểu gốc trong DB. Thứ hai, bạn có thể chọn tận dụng chức năng tự động tăng của DB trên trường thứ hai. DB là cách hiệu quả hơn để theo dõi điều đó. Chắc chắn, nó sẽ bắt đầu bằng 1 và tăng dần lên, nhưng để tạo ra một số có 7 chữ số từ số đó, bạn chỉ cần điền vào đó sáu số không trước khi kết hợp nó với tiền tố ngay trước khi bạn hiển thị cho người dùng. Không quan trọng giá trị tiền tố tại thời điểm đó là gì. Tất cả những gì bạn cần là mã gồm 7 chữ số (lúc đầu sẽ chứa hầu hết các số không) để tìm bất kỳ bản ghi nào. Tiền tố chỉ đơn giản là để giải thích cho con người. Chiến lược này có tác dụng phụ là hai tiền tố không bao giờ có hậu tố giống nhau, nghĩa là bạn sẽ không bao giờ có giá trị ID là ABC0000001 và POZ0000001 cùng một lúc. Tuy nhiên, điều này giới hạn bạn ở tổng số 9.999.999 mục giữa tất cả các tiền tố của bạn.  

Nếu nó là ngẫu nhiên, thì bạn chỉ cần có một phép toán. random(1,10000000), nhưng bạn sẽ cần thêm logic để xác định tính duy nhất và xử lý xung đột. Tôi vẫn khuyên bạn nên chia nó thành hai trường nếu bạn biết rằng đó sẽ luôn là định dạng ID của bạn. Hãy nhớ rằng nếu bạn đi theo con đường ngẫu nhiên, bạn không bao giờ có thể xóa một bản ghi khi nó đã được tạo để đảm bảo rằng ID không được sử dụng lại. Trong trường hợp này, các. phương thức tồn tại () là bạn của bạn hoặc bạn có thể sử dụng chiến lược chèn mà tôi đã đề cập trong chủ đề khác của mình

UUID là viết tắt của Định danh duy nhất toàn cầu. Python cung cấp UUID module giúp tạo một đối tượng ngẫu nhiên bất biến gồm 128 bit định danh. UUID có thể đảm bảo tính duy nhất của Mã định danh theo thời gian và Phần cứng máy tính (MAC, v.v. )

Mô-đun UUID Python được triển khai dựa trên RFC 4122. Thông số kỹ thuật RFC 4122 cung cấp các chi tiết và thuật toán để tạo Số nhận dạng duy nhất của tất cả các phiên bản

Ưu điểm của UUID

  • Nó có thể được sử dụng như một công cụ để tạo một id ngẫu nhiên duy nhất
  • Nó có thể được sử dụng trong các ứng dụng mật mã và băm
  • Nó có thể được sử dụng duy nhất để xác định tài liệu, Người dùng và tài nguyên máy tính

Python

>>> import uuid
>>>
>>> # create random id using uuid1()
>>> print (uuid.uuid1())
1cd41c6c-0c8b-11ed-99a5-4ef9ffba3979
>>>
>>>
>>> print("Use of node and clock sequence")
Use of node and clock sequence
>>> clock_seq = 12345
>>> node = 0xcff5894d4a1
>>> print(uuid.uuid1(node, clock_seq))
ffccfc5e-0c91-11ed-b039-0cff5894d4a1
>>>
0 hỗ trợ các phiên bản UUID sau

  • UUID1 — Tạo UUID từ ID máy chủ, số thứ tự và thời gian hiện tại. Nếu nút không được cung cấp,
    >>> import uuid
    >>>
    >>> # create random id using uuid1()
    >>> print (uuid.uuid1())
    1cd41c6c-0c8b-11ed-99a5-4ef9ffba3979
    >>>
    >>>
    >>> print("Use of node and clock sequence")
    Use of node and clock sequence
    >>> clock_seq = 12345
    >>> node = 0xcff5894d4a1
    >>> print(uuid.uuid1(node, clock_seq))
    ffccfc5e-0c91-11ed-b039-0cff5894d4a1
    >>>
    1 được sử dụng để lấy địa chỉ phần cứng. Nếu clock_seq được cung cấp, nó được sử dụng làm số thứ tự;
  • UUID3 và UUID 5 sử dụng hàm băm mật mã và chuỗi văn bản do ứng dụng cung cấp để tạo UUID. UUID 3 sử dụng hàm băm MD5 và UUID 5 sử dụng hàm băm SHA-1
  • UUID4 sử dụng trình tạo số giả ngẫu nhiên để tạo UUID. Nó an toàn hơn

Bây giờ chúng ta hãy xem nó với một số ví dụ

Sử dụng UUID1()

uuid1() được xác định trong thư viện UUID và có thể được sử dụng để tạo id ngẫu nhiên bằng địa chỉ MAC và thành phần thời gian

cú pháp

uuid.uuid1(node=None, clock_seq=None)

Thông số

  1. nút (đối số tùy chọn) là địa chỉ phần cứng. Nếu một nút không được cung cấp, thì uuid. Hàm getnode() được sử dụng để lấy địa chỉ MAC được quản lý toàn cầu của máy chủ hiện tại
  2. clock_seq (đối số tùy chọn). Nếu clock_seq được cung cấp, nó được sử dụng làm số thứ tự. Mặt khác, một số thứ tự 14 bit ngẫu nhiên được chọn
>>> import uuid
>>>
>>> # create random id using uuid1()
>>> print (uuid.uuid1())
1cd41c6c-0c8b-11ed-99a5-4ef9ffba3979
>>>
>>>
>>> print("Use of node and clock sequence")
Use of node and clock sequence
>>> clock_seq = 12345
>>> node = 0xcff5894d4a1
>>> print(uuid.uuid1(node, clock_seq))
ffccfc5e-0c91-11ed-b039-0cff5894d4a1
>>>

UUID1 có thể được biểu diễn theo cách sau

  • byte. Trả về id ở dạng chuỗi 16 byte
  • int. Trả về id ở dạng số nguyên 128 bit
  • lục giác. Trả về id ngẫu nhiên dưới dạng chuỗi thập lục phân 32 ký tự
>>>
>>> print (uuid.uuid1().bytes)
b'\x85=\xb6\n\x0c\x8b\x11\xed\x99\xa5N\xf9\xff\xba9y'
>>>
>>> print (uuid.uuid1().int)
191823577517340702579004174172713269625
>>>
>>> print (uuid.uuid1().hex)
8922c8460c8b11ed99a54ef9ffba3979
>>>

Bạn cũng có thể lấy phiên bản và biến thể của UUID

>>> print (uuid.uuid1().version)
1
>>> print (uuid.uuid1().variant)
specified in RFC 4122
>>>

Cấu trúc/trường của UUID()

  1. Thời gian thấp. 32 bit đầu tiên của id
  2. time_mid. 16 bit tiếp theo của id
  3. time_hi_version. 16 bit tiếp theo của id
  4. clock_seq_hi_variant. 8 bit tiếp theo của id
  5. clock_seq_low. 8 bit tiếp theo của id
  6. nút. 48 bit cuối cùng của id
  7. thời gian. Trường thành phần thời gian của id
  8. clock_seq. dãy số 14 bit

Sự cố với uuid1()

Vấn đề chính của phương thức uuid1() là nó sử dụng địa chỉ MAC của máy tính, do đó nó có thể xâm phạm quyền riêng tư, mặc dù nó cung cấp tính duy nhất. Vì vậy, phương thức uuid1() không hữu ích trong các ứng dụng nhạy cảm với dữ liệu

Sử dụng uuid4()

Hàm

>>> import uuid
>>>
>>> # create random id using uuid1()
>>> print (uuid.uuid1())
1cd41c6c-0c8b-11ed-99a5-4ef9ffba3979
>>>
>>>
>>> print("Use of node and clock sequence")
Use of node and clock sequence
>>> clock_seq = 12345
>>> node = 0xcff5894d4a1
>>> print(uuid.uuid1(node, clock_seq))
ffccfc5e-0c91-11ed-b039-0cff5894d4a1
>>>
2 của Python tạo UUID bằng cách sử dụng trình tạo ngẫu nhiên thực sự hoặc giả ngẫu nhiên. Và không ảnh hưởng đến quyền riêng tư vì nó không sử dụng MAC của máy tính

>>> import uuid
>>> print("uuid.uuid4() to genrate unique indentier")
uuid.uuid4() to genrate unique indentier
>>> uuid.uuid4()
UUID('406bf9bc-14cc-4a59-925d-ab05e8cea65e')
>>> print(uuid.uuid4())
698290aa-d573-4bf6-89ff-d29dae5baaeb
>>>

Sử dụng uuid3() và uuid5()

cú pháp. uuid3()

Nó tạo UUID dựa trên hàm băm MD5 của mã định danh không gian tên (là UUID) và tên (chuỗi)

________số 8

cú pháp. uuid5()

Nó tạo UUID dựa trên hàm băm SHA-1 của mã định danh không gian tên (là UUID) và tên (chuỗi)

Làm cách nào tôi có thể tạo một ID duy nhất trong Python?

uuid1() được xác định trong thư viện UUID và giúp tạo id ngẫu nhiên bằng địa chỉ MAC và thành phần thời gian . byte. Trả về id ở dạng chuỗi 16 byte. int. Trả về id ở dạng số nguyên 128 bit. lục giác. Trả về id ngẫu nhiên dưới dạng chuỗi thập lục phân 32 ký tự.

Làm cách nào để tự động tạo id trong Python?

cơ bản về UUID. Mô-đun UUID đi kèm với thư viện chuẩn python, do đó, bạn không cần cài đặt bất cứ thứ gì
tạo một id ngẫu nhiên duy nhất. Để tạo một id ngẫu nhiên, bạn gọi phương thức uuid4() và nó sẽ tự động tạo một id duy nhất cho bạn giống như trong ví dụ bên dưới;.
dự án mẫu. .
đầu ra

Làm cách nào để tạo UUID gồm 6 chữ số trong Python?

Làm cách nào để tạo ID duy nhất gồm 6 chữ số trong Python? . # id ngẫu nhiên sử dụng uuid1() nhập uuid . # In id ngẫu nhiên sử dụng uuid1() print ("Id ngẫu nhiên sử dụng uuid1() là. ",end="") in (uuid.

Làm cách nào để chuyển đổi id thành chuỗi trong Python?

Trong Python, một số nguyên có thể được chuyển đổi thành một chuỗi bằng cách sử dụng hàm str() tích hợp sẵn . Hàm str() lấy bất kỳ kiểu dữ liệu python nào và chuyển đổi nó thành một chuỗi.