programing

16 자의 영숫자 문자열을 효율적으로 생성

sourcetip 2021. 1. 16. 11:16
반응형

16 자의 영숫자 문자열을 효율적으로 생성


테이블의 기본 키에 대한 영숫자 고유 ID를 생성하는 매우 빠른 방법을 찾고 있습니다.

이 작품이 좋을까요?

def genKey():
    hash = hashlib.md5(RANDOM_NUMBER).digest().encode("base64")
    alnum_hash = re.sub(r'[^a-zA-Z0-9]', "", hash)
    return alnum_hash[:16]

난수를 생성하는 좋은 방법은 무엇입니까? 마이크로 타임을 기반으로하면 여러 인스턴스에서 동시에 genKey ()를 여러 번 호출 할 가능성을 고려해야합니다.

아니면이 모든 작업을 수행하는 더 좋은 방법이 있습니까?


답변 중 어느 것도 0-9, az, AZ 문자로 구성된 임의의 문자열을 제공하지 않으므로 다음은 대략적인 문자 중 하나를 제공하는 작업 솔루션입니다. 4.5231285 e + 74 키 :

import random, string
x = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(16))
print(x)

또한 ASCII 코드를 전혀 모르고도 매우 읽기 쉽습니다.

이후 더 짧은 버전이 있습니다 python 3.6.2.

import random, string
x = ''.join(random.choices(string.ascii_letters + string.digits, k=16))
print(x)

이것을 사용할 수 있습니다 :

>>> import random
>>> ''.join(random.choice('0123456789ABCDEF') for i in range(16))
'E2C6B2E19E4A7777'

생성 된 키가 고유하다는 보장은 없으므로 원래 삽입이 실패 할 경우 새 키로 재 시도 할 준비가되어 있어야합니다. 또한 임의 값을 사용하는 대신 결정적 알고리즘을 사용하여 자동 증가 ID에서 문자열을 생성하는 것을 고려할 수 있습니다. 이는 고유성을 보장하지만 예측 가능한 키도 제공하기 때문입니다.


uuid 모듈 (Python 2.5+)을 살펴보십시오 .

간단한 예 :

>>> import uuid
>>> uid = uuid.uuid4()
>>> uid.hex
'df008b2e24f947b1b873c94d8a3f2201'

OP는 16 자의 영숫자 문자열을 요청했지만 UUID4 문자열의 길이는 32 자입니다. 이 문자열을 자르지 말고 대신 전체 32자를 사용하십시오.


2016 년 12 월에 출시 된 Python 3.6에서 secrets모듈이 도입되었습니다.

이제 다음과 같이 임의의 토큰을 생성 할 수 있습니다.

import secrets

secrets.token_hex(16)

Python 문서에서 :

secrets모듈은 암호, 계정 인증, 보안 토큰 및 관련 비밀과 같은 데이터를 관리하는 데 적합한 암호화 된 강력한 난수를 생성하는 데 사용됩니다.

특히, 보안이나 암호화가 아닌 모델링 및 시뮬레이션을 위해 설계된 모듈 secrets의 기본 의사 난수 생성기보다 우선적으로 사용해야합니다 random.

https://docs.python.org/3/library/secrets.html


난수의 경우 좋은 소스는 os.urandom다음과 같습니다.

 >> import os
 >> import hashlib
 >> random_data = os.urandom(128)
 >> hashlib.md5(random_data).hexdigest()[:16]

>>> import random
>>> ''.join(random.sample(map(chr, range(48, 57) + range(65, 90) + range(97, 122)), 16))
'CDh0geq3NpKtcXfP'

이 값은 호출 할 때마다 1 씩 증가합니다. 가치를 저장하기에 가장 좋은 장소를 결정하는 것은 그것을 사용하는 방법에 달려 있습니다. 당신은 찾을 수 그것뿐만 아니라 어떻게 GUID를 작업뿐만 아니라 어떻게 작은 하나를 만드는 방법에 대해 설명으로, 관심의 설명.

짧은 대답은 다음과 같습니다. 이러한 문자 중 일부는 타임 스탬프로 사용하고 다른 문자는 "고유 자"로 사용합니다. 값은 uid 생성기를 호출 할 때마다 1 씩 증가합니다.


단순히 파이썬 내장 uuid 를 사용하십시오 .

import uuid
print uuid.uuid4().hex[:16].upper()

Python 내장 uuid를 사용하면됩니다.

UUID가 사용자의 목적에 적합하다면 내장 된 uuid 패키지를 사용하십시오 .

한 줄 솔루션 :

>>> import uuid
>>> str(uuid.uuid4().get_hex().upper()[0:16])
'40003A9B8C3045CA'

참조 URL : https://stackoverflow.com/questions/2511222/efficiently-generate-a-16-character-alphanumeric-string

반응형