Module: Base62

Defined in:
lib/base62-rb.rb,
lib/base62/version.rb

Constant Summary collapse

KEYS =
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".freeze
KEYS_HASH =
KEYS.each_char.with_index.inject({}) { |h, (k, v)| h[k] = v; h }
BASE =
KEYS.length
VERSION =
"0.3.1"

Class Method Summary collapse

Class Method Details

.decode(str) ⇒ Object

Decodes base62 string to a base10 (decimal) number.



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/base62-rb.rb', line 23

def self.decode(str)
  num = 0
  i = 0
  len = str.length - 1
  # while loop is faster than each_char or other 'idiomatic' way
  while i < str.length
    pow = BASE**(len - i)
    num += KEYS_HASH[str[i]] * pow
    i += 1
  end
  num
end

.encode(num) ⇒ Object

Encodes base10 (decimal) number to base62 string.



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/base62-rb.rb', line 9

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