C#임의의 코드의 생성기에 대한 개체
-
10-07-2019 - |
문제
나는 다음과 같은 객체 속성
GID
ID
코드
이름
어떤 클라이언트하고 싶 코드를 입력합니다 그래서 초기 계획을 넣 ID 코드에서 하지만 baseobject 의 orm 은 다른 그래서 나는 같은 조...
내 계획을 넣어####-####완전히 임의의 값 코드에서 어떻게 생성할 수 있는 그런 것 같이 말하는 windows7serial 발전기 타입은 물건만하지 않는 것이 있는 오버헤드는 무엇을 할 것 이 경우.
해결책
당신은 임의의 가치,또는 독특한 가치입니까?
random!= 독.
기억,임의 단국 가능성 지 를 생성하는 동일한 가치,또는 확률의 생성과 동일한 값 시.시간이 증가함에 따라,가능성의 생성하고 이전 값이 증가되고-근처의 확실성.는가 필요하십니까?
개인적으로,나는 추천 사용 Guid 를 가진 어떤 상황에 맞는[참조 가장 쉽 아래 섹션].또한 일부를 제공한 다른 제안 그래서 당신은 옵션에 따라 상황이다.
가장 쉽
는 경우에는 코드는 무 string[ie 할 수 있는 길이 될],가장 쉬운 반 읽을 의미를 생성하는 고유한 것 코드
OrmObject ormObject= new OrmObject ();
string code = string.
Format ("{0} [{1}]", ormObject.Name, Guid.NewGuid ()).
Trim ();
// generates something like
// "My Product [DA9190E1-7FC6-49d6-9EA5-589BBE6E005E]"
대체할 수 있습니다 ormObject.Name
어떤 구별 문자열입니다.나는 일반적으로 사용 typeof (objectInstance.GetType ()).Name
하지만 그는 경우에만 작동 OrmObject 은 기본 클래스의 경우 콘크리트 클래스 사용 모든 것 그들은 모든 것이 끝날 유사한다.는 점을 추가하는 것이 일부 사용자의 컨텍스트에 같은 것으로서@Yuriy Faktorovich 참조 wtf 문서 -사용자는 가 읽을 수 있습니다.
random
나는 하루 이틀 전에 대해 임의의 숫자를 세대입니다.그리 많지 않 성 숫자으로 건물에 간단한 유연한 프레임워크의 주위에 생성기 품질을 개선하기 위해 코드 및 데이터 이 도움이되어야 합리화의 원.
을 읽을 경우에는,당신은 쉽게 쓰는 방법 확장,말
public static class IRandomExtensions
{
public static CodeType GetCode (this IRandom random)
{
// 1. get as many random bytes as required
// 2. transform bytes into a 'Code'
// 3. bob's your uncle
...
}
}
// elsewhere in code
...
OrmObject ormObject = new OrmObject ();
ormObject.Code = random.GetCode ();
...
실제로 값을 생성하,는 것이 좋을 구현하는 IRandom
인터페이스 System.Security.Cryptography.RNGCryptoServiceProvider
구현합니다.말 구현을 생성하는 것이의 버퍼 X 임의의 바이트 및 돌로 많은 필요,재생 스트림할 때 소진되었습니다.
또한 잘 모르겠어요 왜 기록 유지,내 생각이 문제입니다 정말이 매우 매력적이다!-는 경우 CodeType 은 문자열이고 당신이 원하는 무언가를 읽을 수 있는,당신은 단지 말 임의의 바이트와 그들을 차례로"겉으로는"읽을 수 있는 문자열을 통해 Base64 로 변환
public static class IRandomExtensions
{
// assuming 'CodeType' is in fact a string
public static string GetCode (this IRandom random)
{
// 1. get as many random bytes as required
byte[] randomBytes; // fill from random
// 2. transform bytes into a 'Code'
string randomBase64String =
System.Convert.ToBase64String (randomBytes).Trim ("=");
// 3. bob's your uncle
...
}
}
기억
random!= 독.
당신의 값 이 반복합니다.니다.
독
의 숫자가 당신에게 필요한 질문에 대해 자신의 문제입니다.
- 해 모든
Code
값이 있는 독특한입니까?[하지 않을 경우,당신은'너무 열심히 노력 하 고 다시] - 어떤 종류의
Code
?[는 경우 어떤 길이 문자열을 사용하여 전체 가이드] - 은 이산 응용 프로그램?[하지 않을 경우,이용하는 DB 값에 의해 제안@LBushkin 위]
- 는 경우 그것은 배포 응용 프로그램,할 수 있는 클라이언트 응용 프로그램을 생성하고 제출하는 경우 이러한 객체는?[그렇다면,당신이 원하는 세계에서 유일한 식별자,그리고 다시 Guid 를 확인 내기]
나는 확실히 당신은 더 많은 제약 조건이지만,이것은 종류의 예선의 조회 수행해야 하는 경우 당신은 문제가 발생 다음과 같다.에서 이러한 질문,당신이 올 것으로 시리즈의 제약 조건이 있습니다.이러한 제약 조건을 알릴 것입니다 당신의 디자인이다.
도움이 되기를 바랍:)
Btw,을 받을 것이 더 좋은 품질의 솔루션을 게시하는 경우 상[ie 제약]에 대한 문제입니다.또,어떤 종류의 Code
, 가 있는 길이 제약 조건?형식으로 제약 조건?자 제약 조건?
Arg,마지막 편집,나 맹세.한 경우에는 Guid 를 사용할 수도 있습 obfuscate 이,또는 압축""그들의 표현으로 그들을 인코딩 base64-비슷한 base64 변환을 위한 임의의 숫자입니다.
public static class GuidExtensions
{
public static string ToBase64String (this Guid id)
{
return System.Convert.
ToBase64String (id.ToByteArray ()).
Trim ("=");
}
}
과 달리 자르기,base64 로 변환 지 a lossful 변환입니다.물론 트림 위 lossful 에서의 컨텍스트 전체 base64 확장지만 =
은 패딩 추가 정보를 도입 by 변환하지 않는 부분의 Guid 데이터입니다.만약 당신이 가고 싶 시 Guid 에서 이 base64 로 변환된 값은 다음,다시 패드의 base64 문자열에까지 그것의 길이 여기에 있는 4-지 않는 물,그냥 base64 관심이 있다면:)
다른 팁
다음을 사용하여 안내를 생성 할 수 있습니다.
Guid.NewGuid().ToString();
그것은 당신에게 다음과 같은 것을 줄 것입니다.
788E94A0-C492-11DE-BFD4-FCE355D89593
데이터베이스에서 Autonumber 열 또는 시퀀서를 사용하여 고유 한 코드 번호를 생성하십시오. 거의 모든 최신 데이터베이스는 한 형태 또는 다른 형태로 자동 생성 숫자를 지원합니다. 데이터베이스가 지원하는 내용을 살펴보십시오.
DB의 Autonumber/시퀀서 값은 고유 한 것으로 보장되며 획득하기에 상대적으로 저렴합니다. 코드에 할당 된 완전히 순차적 인 숫자를 피하려면 여러 시퀀서 값을 함께 패드하고 연결할 수 있습니다.