Вам в основном нужно так много места для ваших чисел, потому что вы используете базу 10 для их представления. Улучшение было бы использовать основание 16 (гекс). Так, например, вы можете представить 255 (3 цифры) как ff (2 цифры).
Вы можете продвинуть эту концепцию дальше, используя гораздо большую числовую базу ... набор всех символов, которые являются допустимыми параметрами строки запроса:
A-Z, a-z, 0-9, '.', '-', '~', '_', '+'
Это дает вам базу из 67 символов для работы (см. Википедия по QueryString ).
Взгляните на этот пост о подходах к преобразованию базы 10 в произвольные базы чисел.
EDIT:
В связанном сообщении SO посмотрите на эту часть:
string xx = IntToString(42,
new char[] { '0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x'});
Это почти то, что вам нужно. Просто разверните его, добавив несколько пропущенных символов:
yz.- ~ _ +
В этом посте отсутствует метод возврата к базе 10. Я не собираюсь его писать :-), но процедура такая:
Определите счетчик, который я назову ВСЕГО.
Посмотрите на правый самый символ и найдите его позицию в массиве.
ИТОГО = (позиция символа в массиве)
Пример: ввод BA1. ВСЕГО теперь 1 (так как «1» находится в позиции 1 в массиве)
Теперь посмотрите на следующий символ слева от первого и найдите его позицию в массиве.
ВСЕГО + = 47 * (позиция символа в массиве)
Пример: ввод BA1. ИТОГО сейчас (47 * 11) + 1 = 518
Теперь посмотрите на следующий символ слева от предыдущего и найдите его позицию в массиве.
ВСЕГО + = 47 * 47 * (позиция символа в массиве)
Пример: ввод BA1. Всего сейчас (47 * 47 * 10) + (47 * 11) + 1 = 243508
и т. Д.
Я предлагаю вам написать модульный тест, который преобразует набор чисел из базовых 10 в базу 47, а затем обратно, чтобы убедиться, что код преобразования работает правильно.
Обратите внимание, что вы представляли 6-значное число из 10 базовых букв всего из 3 цифр из базы 47: -)