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
'programing' 카테고리의 다른 글
Knowntype 특성과 함께 사용되는 클래스에서 Obsolete 특성을 사용할 때 컴파일러 경고를 무시하는 방법 (0) | 2021.01.16 |
---|---|
NSInvalidUnarchiveOperationException으로 인한 iOS11 WKWebview 충돌 (0) | 2021.01.16 |
Android는 갤러리에서 ImageView로 이미지 가져 오기 (0) | 2021.01.16 |
C #에서 null 값을 int로 설정하는 방법은 무엇입니까? (0) | 2021.01.16 |
반응 형 모드에서 마우스 포인터를 표시하는 방법은 무엇입니까? (0) | 2021.01.16 |