获取用来生成二维码的IBAN
函数accurate_base_convert()是自己写的支持长整型的进制转换函数,毕竟eth地址去掉了0x还有40位那么长……
生成方式步骤参考:https://yangwenbo.com/articles/eth-icap-java.html
/**
* 获取ETH的IBAN
* @param $eth_address
* @return string
*/
function get_IBAN_number($eth_address){
//去掉0x
$eth_address = substr($eth_address,2);
$trans = [];
for($i = 0;$i < 10;$i++){
$trans[$i] = $i;
}
for($i = 0;$i < 26;$i++){
$trans[chr(97 + $i)] = $i + 10;
}
//转成36进制
$eth_36 = accurate_base_convert($eth_address,16,36);
//拼接字符串
$check_address = sprintf('%031s',$eth_36).'xe00';
//将36位字符替换为10进制
$number_address = str_replace(array_keys($trans),array_values($trans),$check_address);
//获取校验码
$mod_result = bcsub(98,bcmod($number_address,97));
$result = 'iban:XE'.sprintf('%02d',$mod_result).strtoupper(sprintf('%031s',$eth_36));
return $result;
}