Transcode a integer from and to base 10 to a alphanumerical handwritten-proof base
JavaScript C# CSS Python PHP Ruby Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
tests
.gitignore
BaseRef.cs C# - Update IsValid() to fix a bug /w default char Oct 6, 2014
README.md
TODO.md rust : general remarks Aug 14, 2014
baseref.js
baseref.php
baseref.py
baseref.rb rs :: Starting Rust project version Jul 30, 2014
baseref.rs

README.md

Base Ref

Utilities to transcode a integer from and to base 10 to a alphanumerical base where the handwritten numbers won't have potential homoglyphes. It was first developed in a defunct service called “dAgence” as base 33 for generating command references, hence the “base ref” name. It is actually a base 28.

This project is just an exercice (TDD and implementation in numerous languages), but you can use it and fork it. A work-in-progress (french written) post will be published during autumn 2014.

But if you find it really useful, I'll be happy.

Author : Xavier "dascritch" Mouton-Dubosc

Contributors :

Blogged about it there (in French):

  1. Relire un numéro de commande écrit à la main

Principles

The “conventionnal” base 36 uses numbers then letters : 0123456789ABCDEFHIJKLMNOPQRSTUVWXYZ

I'm removing any letter that may be confused with numbers when (badly) handwritten :BGILOSYZ

We have 28 available glyphes : 0123456789ACDEFHJKMNPQRTUVWX

Do you read E55S or EGGS ? https://twitter.com/ldodds/status/492965240657944576

Intentions

  • Coding rules are : TDD, DRY, safe
  • Is it possible to do TDD in various languages with only one specification file ?
  • Do tests suite have different behaviours ?
  • What language is smartest to read afterwards ?
  • Ok, it's OOP, but have we smartests patterns ?
  • How Json is decoded ?

API

The class should implements :

  • isValid(string)
    • true : if a string has the glyphes even lowercase or a empty string
    • false : elsewhere
  • encode(absolute integer)
    • string : the translated string
    • false : if not an absolute integer, like real or negative numbers or NaN
  • decode(string)
    • integer : the transcoded number
    • false : if not translatable It may have an exception for debug purposes

Implementations

  • Javascript (with QUnit and Jasmine)
  • Python 3
  • PHP (with Atoum)
  • Ruby 1.9.3
  • C# (by Christopher Maneu)

Licence

Copyright (C) 2014 Xavier "dascritch" Mouton-Dubosc

This software is licenced under the GNU General Purpose Licence. Use it and deploy it as you want : i've done too much closed source before.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Versions

Repository : https://github.com/dascritch/BaseRef

Keeping in touch