고유 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을 숨기려면 sourceURL에서 SHA1 형식을 사용할 수 있지만 그게 무엇을 얻을 수 있을지 모르겠습니다.
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 메서드의 매개 변수 만 변경하면이를 늘리거나 줄일 수 있습니다.
1 억에서 0.001 % 중복.
sha-256 (guid가 더 빠름)을 사용하려면 다음과 같은 작업을 수행해야합니다.
SHA256 shaAlgorithm = new SHA256Managed();
byte[] shaDigest = shaAlgorithm.ComputeHash(ASCIIEncoding.ASCII.GetBytes(url));
return BitConverter.ToString(shaDigest);
물론 ASCII 일 필요는 없으며 다른 종류의 해싱 알고리즘도 가능합니다.
아래와 같이 고유 ID를 만들 수없는 이유는 무엇입니까?
DateTime.Now.Ticks 및 Guid.NewGuid (). ToString ()을 사용하여 함께 결합하고 고유 한 ID를 만들 수 있습니다.
DateTime.Now.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에서 틱의 일부를 가져와 나중에 참조 할 수 있도록 나중에 날짜와 시간을 확인할 수도 있습니다.
이 질문에 대한 답이있는 것 같지만 완전성을 위해 다른 접근 방식을 추가하겠습니다.
Twitter의 Snowflake ID 생성기를 기반으로하는 고유 한 ID 번호 생성기를 사용할 수 있습니다 . C # 구현은 여기 에서 찾을 수 있습니다 .
var id64Generator = new Id64Generator();
// ...
public string generateID(string sourceUrl)
{
return string.Format("{0}_{1}", sourceUrl, id64Generator.GenerateId());
}
Note that one of very nice features of that approach is possibility to have multiple generators on independent nodes (probably something useful for a search engine) generating real time, globally unique identifiers.
// node 0
var id64Generator = new Id64Generator(0);
// node 1
var id64Generator = new Id64Generator(1);
// ... node 10
var id64Generator = new Id64Generator(10);
ReferenceURL : https://stackoverflow.com/questions/11313205/generate-a-unique-id
'program story' 카테고리의 다른 글
R-print ()로 명시적인 줄 바꿈 문자를 추가해야합니까? (0) | 2020.12.29 |
---|---|
파이썬의 기본 언어 (0) | 2020.12.29 |
Laravel Storage 폴더의 경로는 어떻게 얻습니까? (0) | 2020.12.29 |
angularjs를 사용하여 xls로 내보내기 (0) | 2020.12.29 |
모든 텍스트 편집기에 대해 Eclipse에서 글꼴 크기를 어떻게 변경할 수 있습니까? (0) | 2020.12.29 |