Skip to content

zmxv/basepura

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Basepura

Introduction

Basepura is an encoding scheme that converts integers into human-readable strings while preventing accidental offensive words in Latin alphabet languages. This npm package provides a dependency-free TypeScript implementation.

Problem

Standard base-N encoding schemes (Base32, Base36, Base64 etc.) can inadvertently generate offensive substrings when creating public-facing identifiers. Crockford's Base32 partially addresses this but still permits problematic words like twat and merde. Removing vowels is insufficient as obscenities like zmrd (fucker in Czech/Slovak) and acronyms like BDSM remain possible. Digits also enable leetspeak variants (sh1t, 0rg4sm).

Solution

Basepura uses a carefully selected character set to minimize offensive word generation. The encoding has been verified against offensive terms in over 20 languages.

Basepura character set

BCDGHJKLNPQRSTWZbcdghjklnpqrstwz (32 characters)

Excluded characters

Characters Reason for exclusion
A, a fag, twat...
E, e sex, merde...
F, f WTF, af...
I, i clit, dick...
M, m BDSM, zmrd...
O, o homo, sodomy...
U, u fuck, cunt...
V, v Resemble U, u
X, x xxx, shxt...
Y, y dirty, doggy...

Installation

npm i basepura

Usage

import { encode, decode, isBasepura } from 'basepura';

// Encoding a bigint
const numberToEncode = 12345678901234567890n;
const encodedString = encode(numberToEncode);
console.log(`Encoded ${numberToEncode} to: ${encodedString}`);
// Encoded 12345678901234567890n to: QkjJPcgjcwDkd

// Validating a string
const validString = 'QkjJPcgjcwDkd';
const invalidString = 'Hello123';
console.log(`Is ${validString} valid Basepura? ${isBasepura(validString)}`);
// Is QkjJPcgjcwDkd valid Basepura? true
console.log(`Is ${invalidString} valid Basepura? ${isBasepura(invalidString)}`);
// Is Hello123 valid Basepura? false

// Decoding a string
const stringToDecode = 'QkjJPcgjcwDkd';
const decodedNumber = decode(stringToDecode);
console.log(`Decoded ${stringToDecode} to: ${decodedNumber}`); 
// Decoded QkjJPcgjcwDkd to: 12345678901234567890n

// Handling errors
try {
  decode('Invalid');
} catch (e) {
  console.error(e);
  // RangeError: Invalid character in input.
}

try {
  encode(-1n);
} catch (e) {
  console.error(e);
  // RangeError: Input must be a non-negative integer.
}

License

MIT

About

Basepura encoder and decoder

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published