UNPKG

is-address

Version:
39 lines (33 loc) 1.18 kB
const Hex = require('crypto-js/enc-hex'), Sha3 = require('crypto-js/sha3'); const sha3 = (value, options) =>{ if (options && options.encoding === 'hex') { if (value.length > 2 && value.substr(0, 2) === '0x') { value = value.substr(2); } value = Hex.parse(value); } return Sha3(value, { outputLength: 256 }).toString(); }, isChecksumAddress = (address)=> { address = address.replace('0x',''); var addressHash = sha3(address.toLowerCase()); for (var i = 0; i < 40; i++ ) { if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { return false; } } return true; }; const isAddress = function (address) { if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { return false; } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { return true; } else { return isChecksumAddress(address); } }; module.exports=isAddress