Advertisement
Guest User

ValidateAddress.class.php

a guest
Oct 21st, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4. * Cryptocurrency address validator
  5. */
  6. class Premium_ValidateAddress
  7. {
  8.  
  9. public function _valid_btc( $ADDRESS )
  10. {
  11. $addr = $this->__decode_base58( $ADDRESS );
  12. if (strlen($addr) != 50)
  13. return false;
  14.  
  15. $check = substr($addr, 0, strlen($addr) - 8);
  16. $check = pack("H*", $check);
  17. $check = strtoupper(hash("sha256", hash("sha256", $check, true)));
  18. $check = substr($check, 0, 8);
  19.  
  20. return $check == substr($addr, strlen($addr) - 8) ? 'btc' : false;
  21. }
  22.  
  23. public function _valid_litecoin( $ADDRESS )
  24. {
  25. return preg_match('/^[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}$/', $ADDRESS) == 0 ? false : 'ltc';
  26. }
  27.  
  28. public function _valid_eth( $ADDRESS )
  29. {
  30. if (!preg_match('/^(0x)?[0-9a-f]{40}$/i',$ADDRESS))
  31. return false;
  32. elseif (!preg_match('/^(0x)?[0-9a-f]{40}$/',$ADDRESS) || preg_match('/^(0x)?[0-9A-F]{40}$/',$ADDRESS))
  33. return 'eth';
  34. else
  35. return $this->_valid_checksum( $ADDRESS );
  36. }
  37.  
  38. private function _valid_checksum( $ADDRESS )
  39. {
  40. $address = str_replace('0x','',$ADDRESS );
  41. $addressHash = hash('sha3',strtolower( $ADDRESS ));
  42. $addressArray=str_split( $ADDRESS );
  43. $addressHashArray=str_split($addressHash);
  44.  
  45. for($i = 0; $i < 40; $i++ )
  46. {
  47. if (
  48. (intval($addressHashArray[$i], 16) > 7 &&
  49. strtoupper($addressArray[$i]) !== $addressArray[$i]) ||
  50. (intval($addressHashArray[$i], 16) <= 7 &&
  51. strtolower($addressArray[$i]) !== $addressArray[$i])
  52. )
  53. return false;
  54. }
  55. return 'eth';
  56. }
  57.  
  58. private function __encode_hex( $DEC )
  59. {
  60. $hexchars = "0123456789ABCDEF";
  61. $return = "";
  62.  
  63. while (bccomp($DEC, 0) == 1)
  64. {
  65. $dv = (string) bcdiv($DEC, "16", 0);
  66. $rem = (integer) bcmod($DEC, "16");
  67. $DEC = $dv;
  68. $return = $return . $hexchars[$rem];
  69. }
  70.  
  71. return strrev($return);
  72. }
  73.  
  74. private function __decode_base58( $BASE )
  75. {
  76. $base58chars = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
  77. $return = "0";
  78.  
  79. for ($i = 0; $i < strlen($base58); $i++)
  80. {
  81. $current = (string) strpos($base58chars, $base58[$i]);
  82. $return = (string) bcmul($return, "58", 0);
  83. $return = (string) bcadd($return, $current, 0);
  84. }
  85.  
  86. $return = $this->__encode_hex($return);
  87.  
  88. //leading zeros
  89. for ($i = 0; $i < strlen($BASE) && $BASE[$i] == "1"; $i++)
  90. $return = "00" . $return;
  91. if (strlen($return) % 2 != 0)
  92. $return = "0" . $return;
  93.  
  94. return $return;
  95. }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement