문제

간단한 단기 예약 시스템을 만들려고하고 있으며 확인 번호를 생성하고 싶습니다.

  • 독특한
  • 무작위로 보입니다
  • 영숫자
  • 짧고, 32 개보다 훨씬 짧은 문자 길이가 Sha1에 의해 반환되었습니다.

나는 ~ 500 개의 예약을 원하기 때문에 상상하다 가능성이 높습니다.

내가 가진 아이디어 중 하나는 날짜 시간 스탬프와 사용자 이름을 기반으로 SHA1 해시를 생성 한 다음 처음 10 자로 잘라냅니다. ~ 500 예약을 처리 할 수있을 정도로 충분히 독특할까요?

도움이 되었습니까?

해결책

주어진 비트의 SHA-1 해시의 무작위성에는 차이가 없어야하므로 가능합니다. 또 다른 방법은 60 비트 분량의 데이터가있을 때까지 XOR을 사용하여 해시 자체를 접한 다음 사용을 인코딩하는 것입니다. 기본 64 대부분 알파 수치를 얻습니다.

동일한 입력 데이터에 대해 동일한 ID를 반복적으로 생성하려는 경우에만 필요합니다. 그렇지 않으면, 당신이 한 번 생성하고 그 후에 붙잡는 임의의 ID가 있다면, Anders의 제안을 사용하십시오. 갈등이 발생하면 다른 분쟁 만 생성하십시오.

다른 팁

당신은 평범한 무작위 숫자 생성기조차도 사용할 수 있습니다. 그러나 예약 코드가 아직 존재하지 않는지 확인해야합니다. 이 경우 새로운 랜덤/SHA1/등을 얻을 때까지 문자열 ( 'x')을 문자열 (날짜+사용자)에 추가하십시오.

나는 ~ 500 개의 예약을 기대하고 있기 때문에 협업의 가능성이 높다고 생각하지 않습니다.

또 다른 어리석은 아이디어 : 원하는 속성으로 1000 또는 2000 고유의 랜덤 숫자를 생성하고 어딘가에 저장 한 다음 등록 할 때 사용자에게 할당하십시오 :)

Perl에서 수행하는 한 가지 방법은 다음과 같습니다.

sub get_random_name()
{
  my @chars=('a'..'z','A'..'Z');
  my $random_string;

foreach (1..22) { # rand @chars는 0과 scalar @chars $ random_string. = $ chars [rand @chars]; } return $ random_string을 반환합니다. "-". 시각(); }

시간 () 부분이 얼마나 오래 있는지 기억이 나지 않으므로 길이에 맞게 숫자를 조정해야 할 수도 있습니다. 필요하지 않은 경우 해당 부분을 제거 할 수도 있습니다.

그것이 실제로 500 만 있으면, 20,000 명 중 20,000 명을 테이블에 넣고 필요할 때 "다음 미사용 중 사용되지 않은 것"을 가져옵니다.

이 질문에 대한 몇 가지 좋은 팁 : C ++에서 임의의 알파 수 문자열을 어떻게 만들려면?

문자열의 "1", "L", "O", "0", "5", "5", "5", "S", "z", "2"와 같은 문자를 포함하여 고객이 더 쉽게 할 수 있습니다. 전화로 예약 코드를 읽어야 할 때. 해당 링크에 제시된 알고리즘이이를 수행하는 데 도움이됩니다.

안내서를 사용 하시겠습니까? 16 자이지만 충돌에 관심이 없다면 첫 번째 N 문자 만 선택할 수 있습니다.

C#에서 사용할 수 있습니다 http://www.dotnetfunda.com/forums/thread1357-how-generate-unique-alpha-numeric-random-number-in-aspnet.aspx (매우 쉬운 방법, 그들은 말한다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top