Неявное преобразование строки в кодировочные шины Integer base62

uuid = Digest::SHA256.digest(SecureRandom.uuid)
id = Base62.encode(uuid)

неявное преобразование строки в целое число

линия = id = Base62.encode(uuid)

2 ответа

Решение

для передачи строки в base62

uuid = SecureRandom.uuid.gsub("-", "").hex
@id = uuid.base62_encode

Я не думаю, что ваш код будет работать. Вот почему:

Base62.encode(num) берет число base10 и преобразует его в строку base62. Это проблема для вас, как:

Digest::SHA256.digest(SecureRandom.uuid)
# => "\e\x1F\xD6yby\x02o\f)\xA2\x91\xD4\xFB\x85jd\xE0\xF7\xECtd\x8E\xA6\x9Ez\x99\xD8>\x04\nT"

Возвращает строку.

Если вы посмотрите на код в base62-rb gem, и комментарий над методом, вы можете видеть, что он сравнивает строку с целым числом, что является ошибкой, которую я получаю, когда пытаюсь повторить это:

ArgumentError: comparison of String with 0 failed

Вот метод из драгоценного камня:

# From base62-rb.rb line 8-20:

  # Encodes base10 (decimal) number to base62 string.
  def self.encode(num)
    return "0" if num == 0
    return nil if num < 0

    str = ""
    while num > 0
      # prepend base62 charaters
      str = KEYS[num % BASE] + str
      num = num / BASE
    end
    str
  end

Все это, конечно, основано на том факте, что вы используете base62-rb драгоценный камень. Итак, возможно, вы можете дать нам некоторый контекст и сообщить нам, что вы пытались?

Другие вопросы по тегам