以太坊中的國際銀行帳號iban

簡單地說,以太坊中的iban帳號是以太坊爲了和傳統的銀行系統對接而引入的概念,web3.js中提供了以太坊地址和iban地址之間的轉換方法。node

iban:國際銀行帳號

iban這個概念源於傳統的銀行系統,其英文全稱爲International Bank Account Number,即國際銀行賬號。iban的做用是爲全球任意一家銀行中的任意一個帳戶生成一個全球惟一的帳號,以便進行跨行交易。一個iban帳號看起來像這樣:web

XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS

iban地址最多能夠包含34個字母和數字,其中的字母大小寫不敏感。在iban 中包含如下信息:express

  • 國別碼,用來標識國家,遵循ISO3166-1 alpha-2標準
  • 錯誤識別碼,用來對地址進行校驗,採用mod-97-10校驗和協議,即ISO/IEC 7064:2003標準
  • 基本銀行帳號,即BBAN(Basic Bank Account Number),用來標識銀行機構、網點及客戶在該機構內的帳號,這三部分信息的編碼方案依賴於前面說起的國別碼

若是你但願立刻開始學習以太坊DApp實戰開發,推薦兩個在線互動教程:學習

  • 以太坊教程,主要是教授區塊鏈新手入門DApp和智能合約實戰開發
  • 以太坊開發,主要是經過node.js、express、ipfs等開發電商平臺的實戰

以太坊iban:新的國別碼和BBAN編碼方案

以太坊引入了一個新的IBAN國別碼:XE,其中E表明Ethereum,X表明非法幣(non-jurisdictional currencies)。同時,以太坊提出了三種BBAN的編碼格式:direct、basic和indirect。區塊鏈

direct編碼方案中的BBAN爲30個字母/數字,只有一個字段:帳戶編號。例如,以太坊地址00c5496aee77c1ba1f0854206a26dda82a81d6d8轉換爲direct方案的BBAN帳號,就獲得XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS編碼

能夠使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法來執行這一轉換:3d

let myiban = 

web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')

console.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS

basic編碼方案與direct方案的惟一區別在於,其BBAN長度爲31個字母/數字,所以該方案不兼容IBAN。code

indrect編碼方案中的BBAN長度爲16個字母/數字,包含三個字段:blog

  • 資產編號,由3個字母/數字組成
  • 機構編號,由4個字母/數字組成
  • 機構內客戶編號,由9個字母/數字組成

例如,一個採用indrect編碼方案的以太坊iban帳號,看起來是這樣:教程

XE81ETHXREGGAVOFYORK

前面的XE表示國別碼,81爲校驗和,後面的16個字符就是indrect編碼的BBAN,其中:

  • ETH:在本例中,表示客戶帳戶內的資產編號。目前ETH是惟一有效的資產編號
  • XREG:機構編號,XREG表示以太坊基本註冊合約
  • GAVOFYORK:機構內客戶的編號

iban帳號與以太坊地址的轉換

如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,能夠將一個以太坊地址轉換爲direct編碼方案的iban帳號。與之對應的,能夠使用web3.eth.Iban.toAddress方法,將一個採用direct編碼方案的iban帳號,轉換回以太坊地址。例如:

let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")
console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8

檢查iban帳號的有效性

iban帳號中的校驗和用來幫助覈驗一個給定字符串是否爲有效的iban帳號。能夠使用web3.js中的web3.eth.Iban.isValid() 來進行執行校驗。例如:

let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")
console.log(isValid) // true
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
console.log(isValid) // false,由於校驗和無效

原文:http://blog.hubwiz.com/2018/06/03/ethereum-iban/

相關文章
相關標籤/搜索