Golang

如何驗證乙太坊地址(go)?

  • June 7, 2018

我正在遍歷各種地址,我需要知道哪些是 BTC 地址,哪些是 ETH 地址。到目前為止,我只是檢查地址是否是十六進制編碼的。這個功能使用安全嗎?

package main

import (
   "encoding/hex"
   "strings"
   "fmt"
)

func main() {
   key := "1DfjCuWDKRWpv1vGP9UNsb4ooArWnXfqnr"
   fmt.Println(isEther(key)) 
}

func isEther(s string) bool {
   s = strings.TrimPrefix(s, "0x")
   _, err := hex.DecodeString(s)
   if err == nil {
       return true
   }
   return false
}

來自types.go

// IsHexAddress verifies whether a string can represent a valid hex-encoded
// Ethereum address or not.
func IsHexAddress(s string) bool {
   if hasHexPrefix(s) {
       s = s[2:]
   }
   return len(s) == 2*AddressLength && isHex(s)
}

您需要引入其他呼叫的函式和變數,或者在您自己的文件中重新定義它們。

該文件中還有其他與地址相關的實用程序函式也可能有用。

您還可以使用正則表達式來檢查乙太坊地址是否有效:

package main

import (
   "fmt"
   "regexp"
)

func IsValidAddress(v string) bool {
   re := regexp.MustCompile("^0x[0-9a-fA-F]{40}$")
   return re.MatchString(v)
}

func main() {
   fmt.Println(IsValidAddress("0x323b5d4c32345ced77393b3530b1eed0f346429d")) // true
   fmt.Println(IsValidAddress("0xXYZb5d4c32345ced77393b3530b1eed0f346429d")) // false
}

https://play.golang.org/p/k3JqUnZBiKK

引用自:https://ethereum.stackexchange.com/questions/33761