작은 레일 앱을 제작 중이며 추적 번호를 생성하여 고객의 상태를 확인하는 방법이 필요합니다. 주요 해운 회사가 사용하는 것과 비슷한 것을 원하지만, 오래 걸리지는 않습니다. 12-16자를 생각하면 괜찮지 만 0000000001과 같은 것을 원합니다. 사람들이 숫자를 늘리고 주변을 들여다 볼 수 있습니다.고유 한 추적 번호 생성
고유 한 숫자/문자 조합 추적 코드를 생성하는 좋은 방법은 무엇입니까?
작은 레일 앱을 제작 중이며 추적 번호를 생성하여 고객의 상태를 확인하는 방법이 필요합니다. 주요 해운 회사가 사용하는 것과 비슷한 것을 원하지만, 오래 걸리지는 않습니다. 12-16자를 생각하면 괜찮지 만 0000000001과 같은 것을 원합니다. 사람들이 숫자를 늘리고 주변을 들여다 볼 수 있습니다.고유 한 추적 번호 생성
고유 한 숫자/문자 조합 추적 코드를 생성하는 좋은 방법은 무엇입니까?
의미없는 데이터의 경우 시간에 해시를 더한 소금은 항상 견고하며 쉽게 추측 할 수 없습니다 (파이썬을 용서하면 이 Ruby에 대해이라고 들었지만 결코 내 손에 넣지는 않았습니다) 만약 당신이 좋아하면
>>> hashlib.md5(str(time.time()) + "!salt!").hexdigest()[:16]
'46ffb69ebc96412d'
가 대신 정수를 사용하지만, 길이, 당신이하지 않는 제로 패드를이 코드에 따라 변화 할 수있는 기회가 있습니다 : 만약 당신이 좋아하면
>>> hashlib.md5(str(time.time()) + "!salt!").hexdigest()
'7a8b73fa7e0dadf246612e6001ede165'
는 그것을 단축
이전에 617,451,515,>>> int(hashlib.md5(str(time.time()) + "!salt!").hexdigest()[:13], 16)
1346212029197308
는 "ZOMG MD5는 보안 암호화하지 않다"
이>>> int(hashlib.sha256(str(time.time()) + "!salt!").hexdigest()[:13], 16)
1948411134966366
지옥, 당신도 시간을 사용할 필요가 없습니다, 당신만큼 당신이 그것을 소금 등의 autoincrementing 정수를 사용할 수 있습니다 :
>>> int(hashlib.sha256(str(1) + "!salt!").hexdigest()[:13], 16)
1269883740611281
>>> int(hashlib.sha256(str(2) + "!salt!").hexdigest()[:13], 16)
3655373802716929
해시. 아무 것도 없습니까 할 수 있습니까?
모든 테이블에 대해 생성 된 ID가 충분하지 않습니까? "기본값"으로 고유합니다. 하지만 대부분의 경우 단순히 표시되지 않습니다.
물론 타임 스탬프 등으로 포장 할 수 있습니다.
해시 맵을 사용하여 주문 정보를 저장하고 사용자에게 ID의 10 진수/16 진수 표현을 제공하는 이유는 무엇입니까? 그것은 충분히 독특합니다.
SELECT HEX(encode(id,'pass_str')) FROM table;
SELECT * FROM table WHERE id=decode(UNHEX('1F68C22821F2AC'), 'pass_str');
나는 acts_as_hashed (on github)라고 불리는 이런 종류의 시나리오를 위해 플러그인을 작성했습니다. 해시 알고리즘에 사용할 필드를 지정할 수 있으며 플러그인은 crypto_hash라는 필드를 기반으로 고유 한 키를 제공합니다. 이것은 손으로하는 것보다 더 깔끔한 경향이 있으며, 앱 내에서 임의의 수의 모델과 함께 사용할 수 있습니다.
일반적인 방식으로 해시 하시겠습니까? – ukanth
ID의 문자 수를 줄이려면 코드를 Base32 또는 Base64로 인코딩하십시오. – Artelius