Advertisement
Guest User

ValidateAddress.class.php

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