programing

고유 ID 생성

oldcodes 2023. 7. 8. 11:10
반응형

고유 ID 생성

저는 대학생이고 우리의 임무는 검색 엔진을 만드는 것입니다.프론티어에 추가할 때 각 URL에 할당할 고유 ID를 생성하는 데 어려움이 있습니다.저는 Guid 뿐만 아니라 SHA-256 해시 알고리즘을 사용해 보았습니다.GUID를 구현하기 위해 사용한 코드는 다음과 같습니다.

public string generateID(string url_add)
{
    long i = 1;

    foreach (byte b in Guid.NewGuid().ToByteArray())
    {
        i *= ((int)b + 1);
    }

    string number = String.Format("{0:d9}", (DateTime.Now.Ticks / 10) % 1000000000);

    return number;
}

ToString만 사용하면 어떨까요?

public string generateID()
{
    return Guid.NewGuid().ToString("N");
}

URL을 기반으로 하려면 다음을 수행하면 됩니다.

public string generateID(string sourceUrl)
{
    return string.Format("{0}_{1:N}", sourceUrl, Guid.NewGuid());
}

URL을 숨기려면 소스에서 SHA1의 일부 형식을 사용할 수 있습니다.URL입니다만, 그것이 무엇을 달성할 수 있을지 모르겠습니다.

왜 GUID를 사용하지 않습니까?

Guid guid = Guid.NewGuid();
string str = guid.ToString();

여기에는 ID 생성기와 같은 'YouTube-video-id'(예: "UcBKmq2XE5a")가 있습니다.

StringBuilder builder = new StringBuilder();
Enumerable
   .Range(65, 26)
    .Select(e => ((char)e).ToString())
    .Concat(Enumerable.Range(97, 26).Select(e => ((char)e).ToString()))
    .Concat(Enumerable.Range(0, 10).Select(e => e.ToString()))
    .OrderBy(e => Guid.NewGuid())
    .Take(11)
    .ToList().ForEach(e => builder.Append(e));
string id = builder.ToString();

크기가 11자인 임의의 ID를 생성합니다.Take method의 파라미터를 변경하면 이 값을 증가/감소시킬 수도 있습니다.

1억 명 중 0.001%가 중복됩니다.

왜 우리는 아래와 같이 고유한 아이디를 만들지 못합니까?

날짜 시간을 사용할 수 있습니다.이제, 틱스와 가이드.새 안내서().ToString()을 함께 결합하여 고유 ID를 만듭니다.

날짜 시간으로 지정합니다.이제.Ticks가 추가되어 고유 ID가 생성되는 날짜와 시간(초)을 확인할 수 있습니다.

코드를 참조하십시오.

var ticks = DateTime.Now.Ticks;
var guid = Guid.NewGuid().ToString();
var uniqueSessionId = ticks.ToString() +'-'+ guid; //guid created by combining ticks and guid

var datetime = new DateTime(ticks);//for checking purpose
var datetimenow = DateTime.Now;    //both these date times are different.

고유 ID의 눈금 부분을 선택하고 나중에 참조할 수 있도록 날짜와 시간을 확인할 수도 있습니다.

Sha-256(가이드가 더 빠름)을 사용하려면 다음과 같은 작업이 필요합니다.

SHA256 shaAlgorithm = new SHA256Managed();
byte[] shaDigest = shaAlgorithm.ComputeHash(ASCIIEncoding.ASCII.GetBytes(url));
return BitConverter.ToString(shaDigest);

물론 아스키가 아니어도 되고 다른 종류의 해싱 알고리즘도 될 수 있습니다.

이 질문에 대한 답변인 것 같습니다만, 완전성을 위해 다른 접근법을 추가하겠습니다.

Twitter의 Snowflake ID 생성기를 기반으로 하는 고유 ID 번호 생성기를 사용할 수 있습니다.C# 구현은 여기에서 확인할 수 있습니다.

var id64Generator = new Id64Generator();

// ...

public string generateID(string sourceUrl)
{
    return string.Format("{0}_{1}", sourceUrl, id64Generator.GenerateId());
}

이 접근 방식의 매우 좋은 기능 중 하나는 독립 노드(아마도 검색 엔진에 유용한 것)에 여러 개의 생성기를 배치하여 실시간으로 전역적으로 고유한 식별자를 생성할 수 있다는 것입니다.

// node 0
var id64Generator = new Id64Generator(0);

// node 1
var id64Generator = new Id64Generator(1);

// ... node 10
var id64Generator = new Id64Generator(10);

우리는 이런 것을 할 수 있습니다.

string TransactionID = "BTRF"+DateTime.Now.Ticks.ToString().Substring(0, 10);

언급URL : https://stackoverflow.com/questions/11313205/generate-a-unique-id

반응형