JS: fingerprint

more at: https://github.com/carlo/jquery-browser-fingerprint/blob/master/src/jquery.browser-fingerprint-1.1.js https://github.com/rynr/fingerprint.js hash: http://erlycoder.com/49/javascript-hash-functions-to-convert-string-into-integer-hash- http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/#comment-23181

by Marc Chehab

JavaScript

var fingerprint = (function(window, screen, navigator) {

    // https://github.com/darkskyapp/string-hash
    function checksum(str) {
        var hash = 581,
            i = str.length;
    
        while (i--) hash = (hash * 33) ^ str.charCodeAt(i);
    
        return hash >>> 0;
    }

    // http://stackoverflow.com/a/4167870/1250044
    function map(arr, fn){
        var i = 0, len = arr.length, ret = [];
        while(i < len){
            ret[i] = fn(arr[i++]);
        }
        return ret;
    }

    return checksum([
        navigator.userAgent,
        [screen.height, screen.width, screen.colorDepth].join('x'),
        new Date().getTimezoneOffset(),
        !!window.sessionStorage,
        !!window.localStorage,
        map(navigator.plugins, function (plugin) {
            return [
                plugin.name,
                plugin.description,
                map(plugin, function (mime) {
                    return [mime.type, mime.suffixes].join('~');
                }).join(',')
            ].join("::");
        }).join(';')
    ].join('###'));

}(this, screen, navigator));


document.body.innerHTML = fingerprint;