File: base58.rb

package info (click to toggle)
ruby-faker 3.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,360 kB
  • sloc: ruby: 20,654; makefile: 6; sh: 6
file content (22 lines) | stat: -rw-r--r-- 500 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# frozen_string_literal: true

module Faker
  module Base58
    def self.encode(str)
      alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
      base = alphabet.size

      lv = 0
      str.chars.reverse.each_with_index { |v, i| lv += v.unpack1('C') * 256**i }

      ret = +''
      while lv.positive?
        lv, mod = lv.divmod(base)
        ret << alphabet[mod]
      end

      npad = str.match(/^#{0.chr}*/)[0].to_s.size
      '1' * npad + ret.reverse
    end
  end
end