문제

나는 다음과 같은 객체 속성


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!= 독.

당신의 값 반복합니다.니다.


의 숫자가 당신에게 필요한 질문에 대해 자신의 문제입니다.

  1. 해 모든 Code 값이 있는 독특한입니까?[하지 않을 경우,당신은'너무 열심히 노력 하 고 다시]
  2. 어떤 종류의 Code?[는 경우 어떤 길이 문자열을 사용하여 전체 가이드]
  3. 은 이산 응용 프로그램?[하지 않을 경우,이용하는 DB 값에 의해 제안@LBushkin 위]
  4. 는 경우 그것은 배포 응용 프로그램,할 수 있는 클라이언트 응용 프로그램을 생성하고 제출하는 경우 이러한 객체는?[그렇다면,당신이 원하는 세계에서 유일한 식별자,그리고 다시 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/시퀀서 값은 고유 한 것으로 보장되며 획득하기에 상대적으로 저렴합니다. 코드에 할당 된 완전히 순차적 인 숫자를 피하려면 여러 시퀀서 값을 함께 패드하고 연결할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top