본문 바로가기

C#/String | Byte | Int

C# 난수 생성

C# 난수 생성

 

방법1.

#region 구글에서 사용하는 난수문자
public static string GenerateCode(uint id)
{
    return ToBase62(PermuteId(id));
}
 
private static double RoundFunction(uint input)
{
    // Must be a function in the mathematical sense (x=y implies f(x)=f(y))
    // but it doesn't have to be reversible.
    // Must return a value between 0 and 1
    return ((1369 * input + 150889) % 714025) / 714025.0;
}
 
private static uint PermuteId(uint id)
{
    uint l1 = (id >> 16) & 65535;
    uint r1 = id & 65535;
    uint l2, r2;
    for (int i = 0; i < 3; i++)
    {
        l2 = r1;
        r2 = l1 ^ (uint)(RoundFunction(r1) * 65535);
        l1 = l2;
        r1 = r2;
    }
    return ((r1 << 16) + l1);
}
 
static string ToBase62(uint n)
{
    var res = "";
    while (n != 0)
    {
        res = Base62Digit(n % 62) + res;
        n /= 62;
    }
    return res;
}
 
private static char Base62Digit(uint d)
{
    if (d < 26)
    {
        return (char)('a' + d);
    }
    else if (d < 52)
    {
        return (char)('A' + d - 26);
    }
    else if (d < 62)
    {
        return (char)('0' + d - 52);
    }
    else
    {
        throw new ArgumentException("d");
    }
} 
#endregion

 

 

방법2.

public static string RandomString(int length)
{
    const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    var random = new Random();
    return new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray());
}

 

 

 

'C# > String | Byte | Int' 카테고리의 다른 글

C# byte 압축 / 해제  (0) 2020.07.29
C# Byte Array에 Byte Array 합치기  (0) 2020.07.27
C# Byte Array Compare 바이트 비교  (0) 2020.07.27