Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Base62 encoding/decoding

Reply
Thread Tools

Base62 encoding/decoding

 
 
Srikanth Jeeva
Guest
Posts: n/a
 
      05-05-2009
Hi,
can anyone help me in base62 encoding??

if i Encode "ilovemyworld" i should get a code with format[A-Za-z0-9].
If i decode the format, i should get back "ilovemyworld"

For Example,
encode "ilovemyworld" # eDr4e3S
decode "eDr4e3S" # ilovemyworld

Thanks,
Srikanth.J

http://www.srikanthjeeva.blogspot.com
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Martin DeMello
Guest
Posts: n/a
 
      05-06-2009
On Wed, May 6, 2009 at 2:26 AM, Todd Benson <(E-Mail Removed)> wrote:
>
> I don't think it's possible, though, unless you change your
> intermittent base. =A064 is there because "111111".to_i(2) is 63. =A0In


it's definitely possible, just inefficient. first you set up your lookup ta=
ble:

> digits =3D (0..9).to_a.map(&:to_s) + ("a".."z").to_a + ("A".."Z").to_a
>


then you repeatedly find the lowest digit

> out =3D ""
> while n > 0
> rest, units =3D n.divmod(62)
> out =3D digits[units] + out
> n =3D rest
> end


martin

 
Reply With Quote
 
 
 
 
Todd Benson
Guest
Posts: n/a
 
      05-06-2009
On Wed, May 6, 2009 at 11:32 AM, Martin DeMello <(E-Mail Removed)> wrote:
>
> it's definitely possible, just inefficient. first you set up your lookup table:
>
>> digits = (0..9).to_a.map(&:to_s) + ("a".."z").to_a + ("A".."Z").to_a
>>

>
> then you repeatedly find the lowest digit
>
>> out = ""
>> while n > 0
>> rest, units = n.divmod(62)
>> out = digits[units] + out
>> n = rest
>> end

>
> martin
>
>


Isn't that just a simple cipher (i.e. map)? I must be missing
something. According to what I've read so far, base64 is not, and
base62 is, except for that paper written in a scientific journal that
I don't have access to (but, for the summary, of course). I suppose
that is what the OP wanted anyway.

Todd

 
Reply With Quote
 
Martin DeMello
Guest
Posts: n/a
 
      05-07-2009
On Wed, May 6, 2009 at 11:42 PM, Todd Benson <(E-Mail Removed)> wrote:
> On Wed, May 6, 2009 at 11:32 AM, Martin DeMello <(E-Mail Removed)>=

wrote:
>>
>>> out =3D ""
>>> while n > 0
>>> =A0 =A0rest, units =3D n.divmod(62)
>>> =A0 =A0out =3D digits[units] + out
>>> =A0 =A0n =3D rest
>>> end

>
> Isn't that just a simple cipher (i.e. map)? =A0I must be missing
> something. =A0According to what I've read so far, base64 is not, and
> base62 is, except for that paper written in a scientific journal that
> I don't have access to (but, for the summary, of course). =A0I suppose
> that is what the OP wanted anyway.


No, it's a number base transformation. Here's an example using base 7
(as being easier to work with than 62 ):

letting n =3D 1250, and using # as a divmod operator:

1250 # 7 =3D 178, 4
178 # 7 =3D 25, 3
25 # 7 =3D 3, 4
3 # 7 =3D 0, 3 <-- we have reached n=3D0, so the loop terminates

so 1250[base 10] =3D 3434 [base 7]

If you think about it, base 10 works the same way:

1250 # 10 =3D 125, 0
125 # 10 =3D 12, 5
12 # 10 =3D 1, 2
1 # 10 =3D 0, 1

so 1250[base 10] =3D 1250[base 10]

To go the other way, you repeatedly add the least significant digit
and multiply by the base

so 3434[7]

start with 0, and read the digits in forward order
(0 * 7) + 3 =3D 3
3 * 7 + 4 =3D 25
24 * 7 + 3 =3D 178
178 * 7 + 4 =3D 1250 <--- et voila!

martin


martin

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Standard Base62 Encoding? Intransition Ruby 4 11-02-2010 04:18 PM



Advertisments