php中ASCⅡ码
<?phpclass ascii{function decode ( $str ){ preg_match_all ( " /(d{2,5})/ " , $str , $a ) ; $a = $a [ 0 ] ; foreach ( $a as $dec ) { if ( $dec < 128 ) { $utf .= chr ( $dec ) ; } else if ( $dec < 2048 ) { $utf .= chr ( 192 + (( $dec - ( $dec % 64 )) / 64 )) ; $utf .= chr ( 128 + ( $dec % 64 )) ; } else { $utf .= chr ( 224 + (( $dec - ( $dec % 4096 )) / 4096 )) ; $utf .= chr ( 128 + ((( $dec % 4096 ) - ( $dec % 64 )) / 64 )) ; $utf .= chr ( 128 + ( $dec % 64 )) ; } } return $utf ;}function encode ( $c ){ $len = strlen ( $c ) ; $a = 0 ; while ( $a < $len ) { $ud = 0 ; if ( ord ( $c { $a }) >= 0 && ord ( $c { $a }) <= 127 ) { $ud = ord ( $c { $a }) ; $a += 1 ; } else if ( ord ( $c { $a }) >= 192 && ord ( $c { $a }) <= 223 ) { $ud = ( ord ( $c { $a }) - 192 ) * 64 + ( ord ( $c { $a + 1 }) - 128 ) ; $a += 2 ; } else if ( ord ( $c { $a }) >= 224 && ord ( $c { $a }) <= 239 ) { $ud = ( ord ( $c { $a }) - 224 ) * 4096 + ( ord ( $c { $a + 1 }) - 128 ) * 64 + ( ord ( $c { $a + 2 }) - 128 ) ; $a += 3 ; } else if ( ord ( $c { $a }) >= 240 && ord ( $c { $a }) <= 247 ) { $ud = ( ord ( $c { $a }) - 240 ) * 262144 + ( ord ( $c { $a + 1 }) - 128 ) * 4096 + ( ord ( $c { $a + 2 }) - 128 ) * 64 + ( ord ( $c { $a + 3 }) - 128 ) ; $a += 4 ; } else if ( ord ( $c { $a }) >= 248 && ord ( $c { $a }) <= 251 ) { $ud = ( ord ( $c { $a }) - 248 ) * 16777216 + ( ord ( $c { $a + 1 }) - 128 ) * 262144 + ( ord ( $c { $a + 2 }) - 128 ) * 4096 + ( ord ( $c { $a + 3 }) - 128 ) * 64 + ( ord ( $c { $a + 4 }) - 128 ) ; $a += 5 ; } else if ( ord ( $c { $a }) >= 252 && ord ( $c { $a }) <= 253 ) { $ud = ( ord ( $c { $a }) - 252 ) * 1073741824 + ( ord ( $c { $a + 1 }) - 128 ) * 16777216 + ( ord ( $c { $a + 2 }) - 128 ) * 262144 + ( ord ( $c { $a + 3 }) - 128 ) * 4096 + ( ord ( $c { $a + 4 }) - 128 ) * 64 + ( ord ( $c { $a + 5 }) - 128 ) ; $a += 6 ; } else if ( ord ( $c { $a }) >= 254 && ord ( $c { $a }) <= 255 ) { //error $ud = false ; } $scill .= " &# $ud ; " ; } return $scill ;}最近在技术群中有位兄弟提出了一个问题:想让自增的ID格式化为A001——A999B001——B999……Z001——Z999,我最初的构思是循环中,分if条件判断出来进行A——Z字母,但是这样做有个极大的缺点,代码显得很呆板冗余,26个英文字母等于需要26个判断。后来有人支招将字母变成ASCⅡ码,恰好A——Z等于ASCⅡ码的65——91;这样就只需要一个函数进行格式化ID就可以了: function format_string( $num ) { $tag = floor (( $num - 1 ) / 999 ); // part1计算asc码 $part1 = 65 + $tag ; // part2计算数字部分 $part2 = $num - 999 * $tag ; $a = strlen ( $part2 ); for ( $i = 0 ; $i < ( 3 - $a ); $i ++ ) { $b .= 0 ; } $str = chr ( $part1 ) . $b . $part2 ; return $str ; } for ( $i = 1 ; $i < 5000 ; $i ++ ) { echo $str = format_string( $i ) . ' <br /> ' ; }
页:
[1]