내 해시가 고유한지 확인하는 방법은 무엇입니까?

Jethro Hazelhurst

학생들을위한 독특한 교실을 만들기 위해 짧은 5 자 해시를 만들고 있습니다. 일반적인 해시는 AJ678.

다음과 같이 해시를 생성하고 있습니다.

public function generateToken($length = 5)
{
    return strtoupper(substr(md5(rand()), 0, $length));
}

앱이 사용되는 동안 수천 개의 강의실이 생성 될 것으로 예상하고 있습니다. 결국 충돌이 발생할 것입니다. 모든 해시가 고유한지 확인하는 방법을 알고 싶습니다.

token필드를 고유 한 필드로 만들었습니다 .

이 작업을 수행하는 가장 좋은 방법은 해시를 생성 한 다음 해시가 내 데이터베이스에 이미 있는지 확인하고 새 해시를 생성하면 해시를 사용하는 것입니다.

이것이 올바른 방법입니까?

편집 : 나는 자신을 호출하는 함수를 구현하는 것에 대해 약간 안전하지 않습니다 ...이게 맞습니까?

public function generateToken($length = 5)
{
    $token = strtoupper(substr(md5(rand()), 0, $length));
    if ($this->tokenExistsAlready($token)) {
        $this->generateToken();
    } else {
        return $token;
    }
}

public function tokenExistsAlready()
{
    $this->db->where('token', $token);
    $query = $this->db->get('classes');
    if ($query->num_rows() > 0) {
        return true;
    } else {
        return false;
    }
}
알렉스 카르 신

먼저 "고유"를 정의하십시오. 우리 용어로 고유 한 것은 데이터베이스에 아직 존재하지 않는 길이의 문자열입니다.

이것은 당신의 질문에 거의 대답합니다. 데이터베이스에 대해 확인하지 않는 한 문자열이 고유하다는 것을 확신 할 수 없습니다. 끈이 길수록 기회가 더 얇아집니다. 따라서 귀하의 경우 while데이터베이스를 확인 하는 루프를 만들었을 것 입니다. 데이터베이스에 저장 한 두 번째 문자열부터 시작하여 무작위로 생성 된 두 개의 문자열을 연속으로 맞출 수 있습니다 (그리고 나중에 타임 라인을 따라갈 것입니다). 따라서 "고유 한"항목을 찾을 때까지 루프의 고유성을 확인하는 것이 좋습니다. 다음과 같은 추상적 인 것 :

$token = generateToken();

while(tokenExists($token))
{
    $token = generateToken();
}

문자열의 진정한 고유성을 보장 하는 것은 없습니다 . 임의의 문자열을 생성하는 MySQL UUID()또는 UUID_SHORT(), PHP uniqid()또는 기타를 사용할 수 있습니다 . 그러나 기존 데이터베이스와 비교하지 않는 한 여전히 고유성을 보장하지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

할당량 확인을 위해 내가 소유 한 파일을 나열하는 방법은 무엇입니까?

분류에서Dev

TcxDateEdit에 입력 한 날짜가 MinDate / MaxDate 내에 있는지 확인하는 방법은 무엇입니까?

분류에서Dev

내 Linux 컴퓨터가 해킹 당했는지 확인하는 방법은 무엇입니까?

분류에서Dev

확인 화면을 표시하지 않고 직접 메시지를 보내는 방법은 무엇입니까?

분류에서Dev

시작시 내 활동이 일시 중지 된 이유를 확인하는 방법은 무엇입니까?

분류에서Dev

eval () 내에서 코드가 실행되고 있는지 확인하는 방법은 무엇입니까?

분류에서Dev

내가 작성한 블로그 게시물 수를 확인하는 방법은 무엇입니까?

분류에서Dev

내 컴퓨터가 충돌 한 이유를 확인하는 방법은 무엇입니까?

분류에서Dev

내 WAMP 서버가 32 비트인지 64 비트인지 확인하는 방법은 무엇입니까?

분류에서Dev

내 AIX가 PPC인지 PPC64인지 확인하는 방법은 무엇입니까?

분류에서Dev

내 OS가 64 비트인지 32 비트인지 확인하는 방법은 무엇입니까?

분류에서Dev

사용자 이름의 고유성에 대한 확인을 구현하고 내 경우 경고에 오류를 표시하는 방법은 무엇입니까?

분류에서Dev

내 웹 브라우저가 안전한지 확인하는 방법은 무엇입니까?

분류에서Dev

내 hp 서버가 9000 또는 Integrity인지 확인하는 방법은 무엇입니까?

분류에서Dev

내 hp 서버가 9000 또는 Integrity인지 확인하는 방법은 무엇입니까?

분류에서Dev

내 GPU에서 지원하는 최대 해상도를 확인하는 방법은 무엇입니까?

분류에서Dev

Ruby 날짜 / 시간이 최소 24 시간 이내인지 확인하는 방법은 무엇입니까?

분류에서Dev

사용자가 내 iOS 앱을 처음 방문했는지 확인하는 방법은 무엇입니까?

분류에서Dev

내 CPU가 AES-NI를 지원하는지 확인하는 방법은 무엇입니까?

분류에서Dev

내 시스템이 "다중 아키텍처"인지 확인하는 방법은 무엇입니까?

분류에서Dev

IF 조건 내에서 쿼리가 null인지 확인하는 방법은 무엇입니까?

분류에서Dev

내 DVD 리더가 버너인지 확인하는 방법은 무엇입니까?

분류에서Dev

내 배치가 모두 연속적인지 확인하는 방법은 무엇입니까?

분류에서Dev

명령을 보내기 전에 Elastic Search가 정상인지 확인하는 방법은 무엇입니까?

분류에서Dev

Bash를 사용하여 UID가 고유한지 확인하는 방법은 무엇입니까?

분류에서Dev

while 루프가 내 조건을 깨지 않는지 확인하는 방법은 무엇입니까?

분류에서Dev

현재 날짜 / 시간이 일정 내에 있는지 확인하는 방법은 무엇입니까?

분류에서Dev

Split () 결과가 유효한지 확인하는 방법은 무엇입니까?

분류에서Dev

내 타이머가 모든 작업을 완료했는지 확인하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    할당량 확인을 위해 내가 소유 한 파일을 나열하는 방법은 무엇입니까?

  2. 2

    TcxDateEdit에 입력 한 날짜가 MinDate / MaxDate 내에 있는지 확인하는 방법은 무엇입니까?

  3. 3

    내 Linux 컴퓨터가 해킹 당했는지 확인하는 방법은 무엇입니까?

  4. 4

    확인 화면을 표시하지 않고 직접 메시지를 보내는 방법은 무엇입니까?

  5. 5

    시작시 내 활동이 일시 중지 된 이유를 확인하는 방법은 무엇입니까?

  6. 6

    eval () 내에서 코드가 실행되고 있는지 확인하는 방법은 무엇입니까?

  7. 7

    내가 작성한 블로그 게시물 수를 확인하는 방법은 무엇입니까?

  8. 8

    내 컴퓨터가 충돌 한 이유를 확인하는 방법은 무엇입니까?

  9. 9

    내 WAMP 서버가 32 비트인지 64 비트인지 확인하는 방법은 무엇입니까?

  10. 10

    내 AIX가 PPC인지 PPC64인지 확인하는 방법은 무엇입니까?

  11. 11

    내 OS가 64 비트인지 32 비트인지 확인하는 방법은 무엇입니까?

  12. 12

    사용자 이름의 고유성에 대한 확인을 구현하고 내 경우 경고에 오류를 표시하는 방법은 무엇입니까?

  13. 13

    내 웹 브라우저가 안전한지 확인하는 방법은 무엇입니까?

  14. 14

    내 hp 서버가 9000 또는 Integrity인지 확인하는 방법은 무엇입니까?

  15. 15

    내 hp 서버가 9000 또는 Integrity인지 확인하는 방법은 무엇입니까?

  16. 16

    내 GPU에서 지원하는 최대 해상도를 확인하는 방법은 무엇입니까?

  17. 17

    Ruby 날짜 / 시간이 최소 24 시간 이내인지 확인하는 방법은 무엇입니까?

  18. 18

    사용자가 내 iOS 앱을 처음 방문했는지 확인하는 방법은 무엇입니까?

  19. 19

    내 CPU가 AES-NI를 지원하는지 확인하는 방법은 무엇입니까?

  20. 20

    내 시스템이 "다중 아키텍처"인지 확인하는 방법은 무엇입니까?

  21. 21

    IF 조건 내에서 쿼리가 null인지 확인하는 방법은 무엇입니까?

  22. 22

    내 DVD 리더가 버너인지 확인하는 방법은 무엇입니까?

  23. 23

    내 배치가 모두 연속적인지 확인하는 방법은 무엇입니까?

  24. 24

    명령을 보내기 전에 Elastic Search가 정상인지 확인하는 방법은 무엇입니까?

  25. 25

    Bash를 사용하여 UID가 고유한지 확인하는 방법은 무엇입니까?

  26. 26

    while 루프가 내 조건을 깨지 않는지 확인하는 방법은 무엇입니까?

  27. 27

    현재 날짜 / 시간이 일정 내에 있는지 확인하는 방법은 무엇입니까?

  28. 28

    Split () 결과가 유효한지 확인하는 방법은 무엇입니까?

  29. 29

    내 타이머가 모든 작업을 완료했는지 확인하는 방법은 무엇입니까?

뜨겁다태그

보관