Генерация без учета регистра уникальных буквенно-цифровых строк фиксированной длины - PullRequest
0 голосов
/ 26 февраля 2009

Я искал элегантное решение без удачи. В конечном итоге мне нужно создать несколько уникальных идентификаторов (на одном компьютере) фиксированной длины (из 3 символов), которые начинаются с буквы и содержат только цифры или заглавные буквы. (например, AXX, где X может быть числом или буквой)

Я использую утилиту mktemp для генерации уникальных идентификаторов. Проблема: mktemp создает временные имена файлов, которые чувствительны к регистру.

В настоящее время я храню каждый временный файл, сгенерированный в директории "GeneratedFile". Затем я создаю нечувствительную к регистру версию файла и сохраняю ее в каталоге «ExistingID». Каждый раз, когда я вызываю mktemp, я проверяю, есть ли в сгенерированном файле регистр без учета регистра в каталоге ExistingID. Если это произойдет, я продолжу вызывать mktemp, пока не создам имя файла, которое в данный момент не используется в качестве уникального идентификатора.

Есть ли лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2009

Это кажется слишком легким,

mktemp AXX | tr 'a-z' 'A-Z'

Обновление

Точка, которая может генерировать неуникальные имена после tr, хороша, но посмотрите, есть ли какая-то причина, почему они должны быть уникальными и random ? Почему бы просто не генерировать их в лексикографическом порядке?

 # pseudobash, untested
 digit1=0
 digit2=0
 chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 function nextName {
      str= "A" chars[digit2] chars[digit1]
      ((digit1++))
      if digit1 > 35
      then
          ((digit2++))
          digit1=0
      fi
      return str
  }
0 голосов
/ 26 февраля 2009

Вы не упоминаете, насколько уникальным он должен быть - уникальным на одной машине? По сети? Есть ли у буквы * у 1002 *? Если числа только в порядке, тогда простым подходом может быть использование текущей системной метки времени, если вам не нужно более одной уникальной строки в одном конкретном экземпляре во времени. Может быть, даже запустить его через md5, чтобы преобразовать его в буквенно-цифровую строку фиксированной длины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...