numerology
Version:
converts a string to a number in the given range
83 lines (57 loc) • 2.08 kB
Markdown
> converts a string to a number in the given range
[](
[](
[](
[](
[](http://g14n.info/kiss-literate-programming)
```bash
npm install numerology
```
> Convert a name to a port number, deterministically
```javascript
const numerology = require('numerology')
const userPortsRange = [1024, 49151]
const port = numerology('my-app-name', userPortsRange)
```
Suppose you have a list of domains you want to distribute in 6 folders,
in a random but balanced way. You can associate a number from 1 to 6 with
the snippet `numerology(domain, [1, 7])`, launch the following command
to get the result.
```bash
node examples/distributeDomains.js | sort | uniq -c
148 folder1
148 folder2
139 folder3
138 folder4
146 folder5
153 folder6
128 folder7
```
[](https://en.wikipedia.org/wiki/Numerology#Latin_alphabet_systems), which actually is not implemented by this package, assigns a number to every lower case latin letter.
The function below uses `String.prototype.charCodeAt` to accept every character and `String.prototype.toLowerCase` to be **case insensitive**.
/**
* @param {String} name you want to convert into a number.
* @param {Array} [range] defaults to `[0, 9]`.
* @returns {Number} num.
*/
function numerology (name, range) {
if (arguments.length === 1) range = [0, 9]
const inf = range[0]
const sup = range[1]
var num = name.split('')
.map((x) => x.toLowerCase().charCodeAt())
.reduce((a, b) => a + b)
if (num < inf) num += inf
if (num > sup) num = (num % sup) + inf
return num
}
module.exports = numerology
[](http://g14n.info/mit-license)
[]: http://g14n.info/kiss-literate-programming "KISS Literate Programming"