Uğraşmayın boş laflara ve yazılara direk kod C# ShortUrl
public static class ShortUrl
{
private const string ShorturlCharsLcase = "abcdefgijkmnopqrstwxyz";
private const string ShorturlCharsUcase = "ABCDEFGHJKLMNPQRSTWXYZ";
private const string ShorturlCharsNumeric = "23456789";
public static string RandomCharacters()
{
var charGroups = new[]
{
ShorturlCharsLcase.ToCharArray(),
ShorturlCharsUcase.ToCharArray(),
ShorturlCharsNumeric.ToCharArray()
};
var charsLeftInGroup = new int[charGroups.Length];
for (var i = 0; i < charsLeftInGroup.Length; i++)
charsLeftInGroup[i] = charGroups[i].Length;
var leftGroupsOrder = new int[charGroups.Length];
for (var i = 0; i < leftGroupsOrder.Length; i++)
leftGroupsOrder[i] = i;
var randomBytes = new byte[4];
var rng = new RNGCryptoServiceProvider();
rng.GetBytes(randomBytes);
var seed = (randomBytes[0] & 0x7f) << 24 | randomBytes[1] << 16 | randomBytes[2] << 8 | randomBytes[3];
var random = new Random(seed);
var shortUrl = new char[random.Next(8, 8)];
var lastLeftGroupsOrderIdx = leftGroupsOrder.Length - 1;
for (var i = 0; i < shortUrl.Length; i++)
{
int nextLeftGroupsOrderIdx;
if (lastLeftGroupsOrderIdx == 0)
nextLeftGroupsOrderIdx = 0;
else
nextLeftGroupsOrderIdx = random.Next(0,
lastLeftGroupsOrderIdx);
var nextGroupIdx = leftGroupsOrder[nextLeftGroupsOrderIdx];
var lastCharIdx = charsLeftInGroup[nextGroupIdx] - 1;
var nextCharIdx = lastCharIdx == 0 ? 0 : random.Next(0, lastCharIdx + 1);
shortUrl[i] = charGroups[nextGroupIdx][nextCharIdx];
if (lastCharIdx == 0)
charsLeftInGroup[nextGroupIdx] = charGroups[nextGroupIdx].Length;
else
{
if (lastCharIdx != nextCharIdx)
{
var temp = charGroups[nextGroupIdx][lastCharIdx];
charGroups[nextGroupIdx][lastCharIdx] = charGroups[nextGroupIdx][nextCharIdx];
charGroups[nextGroupIdx][nextCharIdx] = temp;
}
charsLeftInGroup[nextGroupIdx]--;
}
if (lastLeftGroupsOrderIdx == 0)
lastLeftGroupsOrderIdx = leftGroupsOrder.Length - 1;
else
{
if (lastLeftGroupsOrderIdx != nextLeftGroupsOrderIdx)
{
var temp = leftGroupsOrder[lastLeftGroupsOrderIdx];
leftGroupsOrder[lastLeftGroupsOrderIdx] = leftGroupsOrder[nextLeftGroupsOrderIdx];
leftGroupsOrder[nextLeftGroupsOrderIdx] = temp;
}
lastLeftGroupsOrderIdx--;
}
}
return new string(shortUrl);
}
}




0 yorum:
Yorum Gönder