3 つの PHP 中国語検証コードの生成と呼び出しメソッド PHP で中国語の検証コードを生成するには、検証コードの生成とは別の操作を実行する必要があります。GD 関数は UTF8 形式でエンコードされたテキストのみを受け入れるため、PHP を使用して中国語の検証コードを生成する場合は、最初にエンコード変換を実行する必要があります。動作するphpのiconvをインスタンス化できます。
中国語の検証コードの生成とメソッドの呼び出しに関する 3 つの PHP チュートリアル
PHP で中国語の検証コードを生成するには、検証コードの生成とは別の操作を行う必要があります。 gd 関数は UTF8 形式でエンコードされたテキストのみを受け入れるため、PHP を使用して中国語の検証コードを生成する場合は、最初にエンコード変換を実行する必要があります。動作するphpのiconvをインスタンス化できます。
*/
$ch_str="中国語の文字を含む中国語の確認コードを生成したいと考えています";
$str=array();
for ($i=0;$i{
$str[]=$ch_str[$i].$ch_str[$i+1].$ch_str[$i+2];
}
//画像の長さと高さ
$image_x=200;
$image_y=100;
$im = imagecreate($image_x,$image_y);
//ここの写真の背景色は白です
$bkg = imagecolorallocate($im,255,255,255);
// 表示されるフォント スタイル。ファイルを対応するディレクトリに配置する必要があります。ファイルがない場合は、ウィンドウのフォント ファイルを探してください。
$fnt = "simfang.ttf";
//画像に色を割り当てます
$white=imagecolorallocate($im,234,185,95);
//画像上に楕円弧を描き、下側の座標点を指定します
imagearc($im, 150, 8, 20, 20, 75, 170, $white);
imagearc($im, 180, 7,50, 30, 75, 175, $white);
//画像上に線分を描き、下の座標点を指定します
イメージライン($im,20,20,180,30,$white);
イメージライン($im,20,18,170,50,$white);
イメージライン($im,25,50,80,50,$white);
//ランダムなポイントの数
$noise_num=3000;
$line_num=80;
//紛らわしい様々な文字の色
$rectangle_color=imagecolorallocate($im,0xaa,0xaa,0xaa);
$noise_color=imagecolorallocate($im,0x00,0x00,0x00);
$font_color=imagecolorallocate($im,0x00,0x00,0x00);
for($i=0;$i {
// 座標点上に単一のピクセルを描画します。この点は上で定義されており、黒です。
imagesetpixel($im,mt_rand(0,$image_x),mt_rand(0,$image_y),$noise_color);
}for($i=0;$i {
$image_x=110; $image_y=110; $im = imagecreate($image_x,$image_y); $bkg = imagecolorallocate($im,255,255,255); $fnt = "hb.ttf" //表示されるフォントスタイル
$line_color=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
// 2 つの座標点の間に線を描きます。色は上で定義されています
Imageline($im,mt_rand(0,$image_x),mt_rand(0,$image_y),mt_rand(0,$image_x),mt_rand(0,$image_y),$line_color); }
$randnum=rand(0,count($str)-4);
//偶数にしてください
if ($randnum%2)
{
$randnum+=1; }
$str1=$str[$randnum].$str[$randnum+1];
($i=0;$i {
imagettftext($im, rand(28,32), rand(0,70), rand(($image_x/4)*$i+$image_x/10,($image_x/4)*$i+$image_x/8), rand($image_y/2+$image_y/10,$image_y/2+$image_y/5), $font_color, $fnt, $str[$randnum+$i]); }
imagepng($im);
imagedestroy($im);
//中国語の認証コード 2 を生成します
$str="漢字";; $white=imagecolorallocate($im,234,185,95); imagearc($im, 150, 8, 20, 20, 75, 170, $white); imagearc($im, 180, 7,50, 30, 75, 175, $white); イメージライン($im,20,20,180,30,$white); イメージライン($im,20,18,170,50,$white); イメージライン($im,25,50,80,50,$white); $noise_num=3000; $line_num=80; imagecolorallocate($im,0xff,0xff,0xff); $rectangle_color=imagecolorallocate($im,0xaa,0xaa,0xaa); $noise_color=imagecolorallocate($im,0x00,0x00,0x00); $font_color=imagecolorallocate($im,0x00,0x00,0x00); $line_color=imagecolorallocate($im,0x00,0x00,0x00); for($i=0;$i imagesetpixel($im,mt_rand(0,$image_x),mt_rand(0,$image_y),$noise_color); for($i=0;$i imageline($im,mt_rand(0,$image_x),mt_rand(0,$image_y),mt_rand(0,$image_x),mt_rand(0,$image_y),$line_color); $randnum=rand(0,strlen($str)-4); if ($randnum%2)$randnum+=1; $str1=substr($str,$randnum,4); $str2 = iconv("gb2312","utf-8",$str1);//$str1 に中国語の文字が含まれていることを確認します
imagettftext($im, rand(28,32), rand(0,70), rand(25,27), rand(70,100), $font_color, $fnt, $str2); 画像png($im); imagedestroy($im);
//配列に漢字を入れます
/*
gd 関数は、utf8 形式でエンコードされたテキストのみを受け入れるため、テキストを書き込む前にエンコード変換を最初に実行する必要があります。 PHP に付属の iconv ライブラリと mbstring ライブラリの両方でこの作業を完了できます
*/$randcode=array('宠');
$codetable=array();
$fp=fopen("gb2312.txt","r");
while($line=fgets($fp))
$codetable[hexdec(substr($line,0,6))]=substr($line,7,6);
fclose($fp);//gb2312转utf8
関数 gb2utf8($gbstr)
{
グローバル $codetable;
if(trim($gbstr)=="")
$gbstr;
を返します $ret="";
$utf8="";
その間($gbstr)
{
if(ord(substr($gbstr,0,1))>127)
{
$thisw=substr($gbstr,0,2);
$gbstr=substr($gbstr,2,strlen($gbstr));
$utf8="";
@$utf8=u2utf8(hexdec($codetable[hexdec(bin2hex($thisw))-0x8080]));
if($utf8!="")
for($i=0;$i$ret.=chr(substr($utf8,$i,3));
}
それ以外
{
$ret.=substr($gbstr,0,1);
$gbstr=substr($gbstr,1,strlen($gbstr));
}
}
$ret を返します;
}
//ユニコード转utf8
関数u2utf8($c)
{
$str="";
if($c $str.=$c;
elseif($c {
$str.=(0xc0|$c>>6);
$str.=(0x80|$c&0x3f);
}
elseif($c {
$str.=(0xe0|$c>>12);
$str.=(0x80|$c>>6&0x3f);
$str.=(0x80|$c&0x3f);
}
elseif($c {
$str.=(0xf0|$c>>18);
$str.=(0x80|$c>>12&0x3f);
$str.=(0x80|$c>>6&0x3f);
$str.=(0x80|$c&0x3f);
}
$str;
を返します }//生成付加符号
関数 create_excode($length)
{
グローバル $rancode;
header("コンテンツタイプ: 画像/png");
$image_x=$length*30; //写真宽度
$image_y=40; //写真の高さ
$noise_num=80*$length; // ポイント数
$line_num=$length-2; //干扰ライン数
$image=imagecreate($image_x,$image_y);
imagecolorallocate($image,0xff,0xff,0xff); //設定背景颜色
$rectangle_color=imagecolorallocate($image,0xaa,0xaa,0xaa); //边框颜色
$noise_color=imagecolorallocate($image,0x00,0x00,0x00); //杂点颜色
$font_color=imagecolorallocate($image,0x00,0x00,0x00); //字体颜色
$line_color=imagecolorallocate($image,0x33,0x33,0x33); //干扰線颜色// 杂点を追加します
for($i=0;$i imagesetpixel($image,mt_rand(0,$image_x),mt_rand(0,$image_y),$noise_color);$font_face="simkai.ttf"; //フォント
$x=2;
$session_code='';
for($i=0;$i {
$code=$randcode[mt_rand(0,count($randcode)-1)];
Imagettftext($image,18,mt_rand(-6,6),$x,29,$font_color,$font_face,gb2utf8($code));
$x+=30;
$session_code.=$code;
}
@session_start();
$_session['excode']=$session_code; //追加コードの値をセッションに入れます
//干渉線を追加
for($i=0;$i イメージライン($image,mt_rand(0,$image_x),mt_rand(0,$image_y),
mt_rand(0,$image_x),mt_rand(0,$image_y),$line_color);
imagerectangle($image,0,0,$image_x-1,$image_y-1,$rectangle_color); //境界線を追加します
imagepng($image);
imagedestroy($image);
}
create_excode(6);
// 使用する場合は、HTML 構文を使用します: を呼び出すだけです。サーバー側で検証を行う場合は、セッションに保存されている検証文字と、セッションによって送信された文字を比較します。ユーザーが同じ場合、検証済みです