zoukankan      html  css  js  c++  java
  • 二维码转账

    最近发现好多的以太坊钱包的转账二维码 扫描出来都是 iban开头的所以小小的研究了一下

    说到IBAN就需要先了解下国际银行帐号(IBAN)

    地址 https://en.wikipedia.org/wiki/International_Bank_Account_Number#Validating_the_IBAN

    生成的地址 例如扫码之后的结果 iban:XE56******************?amount=0&token=ETH

    ?之后的无视掉 前四位XE56其实是一部分 后边的31位是一部分

    后边的31位很好理解 钱包地址的36进制 所以这里主要来说一下前边的XE56怎么来的

    XE56 中的XE其实也是写死的 只有56是计算出来的 好了说了这么多 下边开始开始吧

    上边是维基百科的介绍

    首先先把地址转化为36进制 然后前边拼接商XE00(是零不是O)此处要注意地址转换为36进制之后的位数 不够的在前边补零

    address= XE00******************

    public static String ibanChecksum(String address) {

        //此处方法 是根据OC的转义过来的
    
        String[] ibanLookup = new String[256];
        for (int i = 0; i < 256; i++) {
            ibanLookup[i] = "-";
        }
        for (int i = 0; i < 10; i++) {
            ibanLookup['0' + i] = "" + i;
        }
        for (int i = 0; i < 26; i++) {
            ibanLookup['A' + i] = "" + 10 + i;
        }
    
        //将前四位放到后边
    
        address=address.substring(4,address.length())+"XE00";
        long total = 0;
    
            //将字符转换为数字  在此以后的都是摘自 https://github.com/arturmkrtchyan/iban4j  里的方法  在实际开发中大家可以自己写一下 我懒癌晚期 就直接用别人的了  
    
        for (int i = 0; i < address.length(); i++) {
            final int numericValue = Character.getNumericValue(address.charAt(i));
            if (numericValue < 0 || numericValue > 35) {
                throw new IbanFormatException(IBAN_VALID_CHARACTERS, null, null,
                        address.charAt(i),
                        String.format("Invalid Character[%d] = '%d'", i, numericValue));
            }
            total = (numericValue > 9 ? total * 100 : total * 10) + numericValue;
            if (total > MAX) {
                total = (total % MOD);
            }
        }
        int modResult=(int) (total % MOD);
        int checkDigitIntValue = (98 - modResult);
        final String checkDigit = Integer.toString(checkDigitIntValue);
        return checkDigitIntValue > 9 ? checkDigit : "0" + checkDigit;
    }
  • 相关阅读:
    反射
    EFCore笔记之异步查询
    EFCore笔记之查询数据
    Json扩展 (转)
    C语言学习笔记之成员数组和指针
    asp中cookie欺骗/注入原理与防范
    简单的php Mysql类(查询 删除 更新)
    PHP四舍五入精确小数位及取整
    CentOS中配置LNMP环境打开提示File not found
    WIN中SharePoint Server 2010 入门安装部署详解
  • 原文地址:https://www.cnblogs.com/xiaocongcong888/p/9544468.html
Copyright © 2011-2022 走看看