本程序用于生成6 ~ 16位的用户名,主要是对文本的一些操作,事先要准备好一个字符串包。
主要由三个主要程序构成,欢迎大家测试使用。
1、从字典中随机提取数据,写入新文件。
<?php
/* 从字典文件中提取随机值 */
$file1 = "./Words.dic";
$file2 = "./common_pass_mini.dic";
$file3 = "./Sys_Month_Date.Dic";
$rfile = "./5.dic";
$n = 2000;
//提取字典
$basef = file($file1);
$extf = file($file2);
$extf2 = file($file3);
$bf_sum = (count($basef)-1);
$ef_sum = (count($extf)-1);
$ef2_sum =(count($extf2)-1);
//获取随机用户名
for ($i=0; $i<$n; $i++)
{
$bn = crand(0, $bf_sum);
$en = crand(0, $ef_sum);
$en2 = crand(0, $ef2_sum);
$name = $basef[$bn]."_".$extf[$en];
$name = str_replace()("/r/n", "", $name);
$all_name[] = $name;
}
//写入文件
$result = implode("/r/n", $all_name);
$fp = fopen($rfile, "a+") or die('Open $rfile failed');
if (fwrite($fp, $result)) {
echo 'Write user succeed!';
} else {
echo 'Write user failed';
}
//生成随机数字函数
function crand($start, $end)
{
return mt_rand($start, $end);
}
?>
2、合并以上生成的数个文件结果
<?php
/* 合并所有生成结果 */
$result_file = "./result.dic";
$fp = fopen($result_file, "a+") or die("Open $result_file failed");
//合并 1.dic ~ 5.dic
for ($i=1; $i<=5; $i++)
{
$cur_file = file_get_contents($i.".dic");
fwrite($fp, $cur_file);
}
//合并 10.dic ~ 11.dic
for ($i=10; $i<=11; $i++)
{
$cur_file = file_get_contents($i.".dic");
fwrite($fp, $cur_file);
}
fclose($fp);
echo 'Write Succeed';
?>
3、过滤重复值和不属于 6~16 之间的值,并生成最终可用数据
<?php
/* 生成最终结果 */
$file = "./result.dic";
$target = "./target.dic";
//去掉重复值
$files = file($file);
$files = array_unique($files);
//判断值是不是大于6位小于16位
$sum = count($files);
for ($i=0; $i<$sum; $i++)
{
if (strlen($files[$i])>=6 && strlen($files[$i])<=16) {
$rs[] = $files[$i];
} else {
continue;
}
}
//写入目标文件
$result = implode("", $rs);
$fp = fopen($target, "a+") or die("Open $target failed");
fwrite($fp, $result);
echo 'Write succeed';
?>
PHP写的人民币金额数字转中文大写的函数,即将数字转换成中文大写。
使用这个函数随便输个数字,即将打印汉字表示的大写数字,真是奇妙无穷啊。
<?
/**
人民币金额数字转中文大写
link:www.
date:2013-2-28
*/
function cny($ns) {
static $cnums=array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖"),
$cnyunits=array("圆","角","分"),
$grees=array("拾","佰","仟","万","拾","佰","仟","亿");
list($ns1,$ns2)=explode()(".",$ns,2);
$ns2=array_filter(array($ns2[1],$ns2[0]));
$ret=array_merge($ns2,array(implode("",_cny_map_unit(str_split($ns1),$grees)),""));
$ret=implode("",array_reverse(_cny_map_unit($ret,$cnyunits)));
return str_replace()(array_keys()($cnums),$cnums,$ret);
}
function _cny_map_unit($list,$units) {
$ul=count($units);
$xs=array();
foreach (array_reverse($list) as $x) {
$l=count($xs);
if ($x!="0" || !($l%4)) $n=($x=='0'?'':$x).($units[($l-1)%$ul]);
else $n=is_numeric($xs[0][0])?$x:'';
array_unshift($xs,$n);
}
return $xs;
}
?>
使用方法:直接传递数字参数
以下实例打印出大写的数字,输出结果:壹万贰仟壹佰贰拾壹圆
echo cny('12121');
?>
CSV文件
Comma Separator Value(逗号分隔值)。
常用来数据转换的中间文件存在,比如:从Mysql中导出数据到CSV,导入CSV到SqlServer中。
linux环境下php从Mysql数据库中将表的数据按照条件导出成csv,使用utf-8编码导出CSV文件,打开后中文成了乱码 (Windows下CSV文件默认与Microsoft Excel关联),用Notepad++或者Word打开正常,不过排版很乱。
原因在于:BOM。
什么是BOM?
Byte Order Mark(比特序标记)。
为了识别 Unicode 文件,Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACE字符开头。这作为一个”特征符”或”字节顺序标记(byte-order mark,BOM)”来识别文件中使用的编码和字节顺序(big-endian或little-endian),具体的对应关系见下表。
类Unix系统中并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。
代码:
注:
在写csv文件时确保php源码是utf-8,并且无BOM,并且没有输出任何内容。
网页(*.html)有BOM,在IE6.x下打开会出现一神奇的空行,Firefox中没有这种怪现象。