is-address
Version:
以太坊web3.js中的isAddress
39 lines (33 loc) • 1.18 kB
JavaScript
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