bling-hashes
Version:
String hash algorithms.
74 lines (52 loc) • 3.37 kB
Markdown
# Bling Hashes
[](https://www.npmjs.org/package/bling-hashes)
[](https://www.npmjs.org/package/bling-hashes)
[](https://travis-ci.org/XadillaX/bling_hashes)
[](https://coveralls.io/r/XadillaX/bling_hashes?branch=master)
[](https://www.npmjs.org/package/bling-hashes)
[](https://david-dm.org/XadillaX/bling_hashes)
[](https://github.com/xadillax/bling_hashes)
String hash algorithms for node.js.
## Installation
```shell
$ npm install --save bling-hashes
```
## Introduce
There are 8 algorithms so far.
* [BKDRHash](http://www.partow.net/programming/hashfunctions/#BKDRHashFunction)
* [APHash](http://www.partow.net/programming/hashfunctions/#APHashFunction)
* [DJBHash](http://www.partow.net/programming/hashfunctions/#DJBHashFunction)
* [JSHash](http://www.partow.net/programming/hashfunctions/#JSHashFunction)
* [RSHash](http://www.partow.net/programming/hashfunctions/#RSHashFunction)
* [SDBMHash](http://www.partow.net/programming/hashfunctions/#SDBMHashFunction)
* [PJWHash](http://www.partow.net/programming/hashfunctions/#PJWHashFunction)
* [ELFHash](http://www.partow.net/programming/hashfunctions/#ELFHashFunction)
* [CityHash](https://github.com/google/cityhash)
- [CityHash32](https://github.com/google/cityhash/blob/master/src/city.cc#L189): returns a 32-bit hash.
- [CityHash64](https://github.com/google/cityhash/blob/master/src/city.cc#L366): and similar return a 64-bit hash.
- [CityHash128](https://github.com/google/cityhash/blob/master/src/city.cc#L508): and similar return a 128-bit hash.
The benchmark, performance and implementation can be referenced [here (各种字符串Hash函数比较)](https://www.byvoid.com/blog/string-hash-compare/).
## Usage
First you should require this package.
```javascript
var bling = require("bling-hashes");
```
And then you can pass any string to functions (the same name as algorithms, in lowercase).
Eg.
```javascript
var hash1 = bling.bkdr("Hello world!"); ///< 501511565
var hash2 = bling.city32("玉扣"); ///< 887335438
```
## Return Values
+ From `BKDR` to `ELF`, the functions return a `Number` value;
+ `city32` returns a `Number` value too;
+ `city64` returns a `Long` value which may refer [here](https://github.com/dcodeIO/long.js);
+ `city128` returns a `City128Value` value which has properties below:
- `.toString()`: The string value of the 128-bit number;
- `.toLongArray()`: An array that includes two 64-bit `Long` value;
- `.toBuffers()`: An array that includes two `Buffer`s.
- `.toBigNumber()`: A `BigNumber` value which may refer [here](https://github.com/alexbardas/bignumber.js);
## Contribution
Thanks to [BYVoid](https://github.com/byvoid). The C++ implementation code was copied from his blog.
You're welcome to make pull requests.
「雖然我覺得不怎麼可能有人會關注我」