PHP 中文大写数字 转成 数字代码

php 中文大写数字转成数字代码,实例函数代码如下:

  1. echo "<pre>";
  2. echo test('一十二亿七十一万五十一');
  3. /*
  4. create by piaofen
  5. date: 2011-03-31
  6. function: 中文大写数字转阿拉伯数字
  7. */
  8. function chtonum($str='')
  9. {
  10. $unit = array('亿'=>100000000,'万'=>10000,'千'=>1000,'仟'=>1000,'百'=>100,'十'=>10);
  11. $num = array('一'=>1,'二'=>2,'三'=>3,'四'=>4,'五'=>5,'六'=>6,'七'=>7,'八'=>8,'九'=>9);
  12. $str = str_replace(array_keys($num),$num,$str);
  13. $result = array();
  14. $number = '';
  15. preg_match_all('/[0-9]千[0-9]百[0-9]十[0-9]|[0-9]百[0-9]十[0-9]|[0-9]十[0-9]|[0-9]/ism',$str,$pnum);
  16. foreach($pnum[0] as $val){
  17. $tmp = '';
  18. for($i=0;$i<mb_strlen($val,'utf-8');$i++){
  19. $s = mb_substr($val,$i,1,'utf-8');
  20. if(!is_numeric($s)){
  21. $k = $unit[$s];
  22. if(strlen($tmp)>=strlen($k)){
  23. preg_match('/([0-9]*)([0-9]{'.(strlen($k)-1).'})([0-9])/ism',$tmp,$n);
  24. $tmp = ($n[1]+$n[3]).$n[2];
  25. }else{
  26. $tmp = $tmp * $k;
  27. }
  28. }else if($i==(mb_strlen($val,'utf-8')-1)){
  29. $tmp += $s;
  30. }else{
  31. $tmp .= $s;
  32. }
  33. }
  34. $nnum[] = $tmp;
  35. }
  36. $result = str_replace(array_keys($unit),';',str_replace($pnum[0],$nnum,$str));
  37. foreach(explode(';',$result) as $val){
  38. $number .= sprintf('%04d',$val);
  39. }
  40. return sprintf('%2u',$number);
  41. }