고유 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
'programing' 카테고리의 다른 글
SSMS .rpt 출력 파일을 .txt/.csv로 변환 (0) | 2023.07.08 |
---|---|
SQL: 방금 삽입한 값의 ID를 가져오는 방법은 무엇입니까? (0) | 2023.07.08 |
"a == x 또는 y 또는 z"가 항상 참으로 평가되는 이유는 무엇입니까?"a"를 그 모든 것들과 어떻게 비교할 수 있습니까? (0) | 2023.07.08 |
현재 시간을 날짜 시간으로 가져오는 방법 (0) | 2023.07.08 |
vue.jest unit - 계산된 값을 기반으로 Watcher를 테스트하는 방법? (setComputed는 더 이상 사용되지 않습니다.) (0) | 2023.07.08 |