﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>花太香齐的博客 &#187; 算术</title>
	<atom:link href="http://www.ieliwb.com/tag/%e7%ae%97%e6%9c%af/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ieliwb.com</link>
	<description>灵感的来临，没有任何预兆；灵感的消失，也不会有告别仪式；用文字记下她们吧，让灵感永存……</description>
	<lastBuildDate>Sun, 21 Nov 2010 03:36:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>关于PHP算术运算验证码的研究</title>
		<link>http://www.ieliwb.com/php-math-checked/</link>
		<comments>http://www.ieliwb.com/php-math-checked/#comments</comments>
		<pubDate>Mon, 18 May 2009 14:31:00 +0000</pubDate>
		<dc:creator>花太香齐</dc:creator>
				<category><![CDATA[PHP/WEB]]></category>
		<category><![CDATA[算术]]></category>
		<category><![CDATA[验证码]]></category>

		<guid isPermaLink="false">http://www.ieliwb.com/?p=92</guid>
		<description><![CDATA[<img src="http://www.ieliwb.com/u/img/math_check.png" alt="math_check" title="math_check" width="435" height="166" class="alignnone size-full wp-image-93" />
最近2天在研究验证码，看了很多，不外乎图片，算术，token验证（<a href="http://www.ieliwb.com/?p=87">PHP无码验证机制</a>），其中当算图片的用户体验最不好了，最少都要输入4个字母，有的更多，目的不外乎是为了防止垃圾留言等。今天为大家推荐一个算术验证的机制，类库是国外的人写的，挺不错的，基本可以放弃图片验证了。而且不依赖cookie和session。转载请注明来自<a href="http://www.ieliwb.com">www.ieliwb.com</a>[......]<p class='read-more'><a href='http://www.ieliwb.com/php-math-checked/'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.ieliwb.com/u/img/math_check.png" alt="math_check" title="math_check" width="435" height="166" class="alignnone size-full wp-image-93" /><br />
最近2天在研究验证码，看了很多，不外乎图片，语音，算术，token验证（<a href="http://www.ieliwb.com/?p=87">PHP无码验证机制</a>），其中当算图片的用户体验最不好了，最少都要输入4个字母，有的更多，目的不外乎是为了防止垃圾留言等。今天为大家推荐一个算术验证的机制，类库是国外的人写的，挺不错的，基本可以放弃图片验证了。而且不依赖cookie和session。转载请注明来自<a href="http://www.ieliwb.com">www.ieliwb.com</a></p>
<p><strong>math类库(mathcheck.class.php)：</strong>英语比较烂，只简单的注明功能</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">&lt;?php</span></li>
<li><span style="color: #ffa500;">/*&nbsp;&nbsp; </span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; Author: Michael Woehrer &lt;michael dot woehrer at gmail dot com&gt;</span></li>
<li><span style="color: #ffa500;">Author URI: </span><span style="color: Blue;">http://sw-guide.de/</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; Version: 1.1</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; Copyright&nbsp; 2006-2007, all rights reserved</span></li>
<li><span style="color: #ffa500;">*/</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">class</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">MathCheck</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$opt</span><span style="color: Gray;">;&nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// array containing the options</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$info</span><span style="color: Gray;">;&nbsp; &nbsp;&nbsp; </span><span style="color: #ffa500;">// containing information</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;"> * MathCheck</span></li>
<li><span style="color: #ffa500;"> */</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">MathCheck</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">opt</span><span style="color: Gray;"> = </span><span style="color: Green;">array</span><span style="color: Olive;">(</span></li>
<li><span style="color: #8b0000;">'</span><span style="color: Red;">unique</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> =&gt; </span><span style="color: #8b0000;">'</span><span style="color: Red;">LnfvpVZmsSCfLf0WxXN0</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: #8b0000;">'</span><span style="color: Red;">input_numbers</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> =&gt; </span><span style="color: #8b0000;">'</span><span style="color: Red;">1~1, 2~2, 3~3, 4~4, 5~5, 6~6, 7~7, 8~8, 9~9, 10~10</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;"> * GenerateValues 创建算术分子</span></li>
<li><span style="color: #ffa500;"> */</span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">GenerateValues</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: #00008b;">$num_array</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">auxNoToArray</span><span style="color: Olive;">(</span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">opt</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">input_numbers</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$rand_keys</span><span style="color: Gray;"> = </span><span style="color: Blue;">array_rand</span><span style="color: Olive;">(</span><span style="color: #00008b;">$num_array</span><span style="color: Gray;">, </span><span style="color: Maroon;">2</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">info</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">operand1</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$num_array</span><span style="color: Olive;">[</span><span style="color: #00008b;">$rand_keys</span><span style="color: Olive;">[</span><span style="color: Maroon;">0</span><span style="color: Olive;">]]</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">info</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">operand2</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$num_array</span><span style="color: Olive;">[</span><span style="color: #00008b;">$rand_keys</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]]</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">info</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">result</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">auxGenerateHash</span><span style="color: Olive;">(</span><span style="color: #00008b;">$rand_keys</span><span style="color: Olive;">[</span><span style="color: Maroon;">0</span><span style="color: Olive;">]</span><span style="color: Gray;"> + </span><span style="color: #00008b;">$rand_keys</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;">, </span><span style="color: Blue;">date</span><span style="color: Olive;">(</span><span style="color: Blue;">j</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;"> * InputValidation&nbsp; 验证计算结果</span></li>
<li><span style="color: #ffa500;"> * Input validation. Returns an empty string if validation passed or an error string if not passed.&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: #ffa500;"> */</span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">InputValidation</span><span style="color: Olive;">(</span><span style="color: #00008b;">$actualResult</span><span style="color: Gray;">, </span><span style="color: #00008b;">$userEntered</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: #00008b;">$error</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">''</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// Case 1: User has not entered an answer at all:</span></li>
<li><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: #00008b;">$error</span><span style="color: Gray;"> == </span><span style="color: #8b0000;">''</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: #00008b;">$userEntered</span><span style="color: Gray;"> == </span><span style="color: #8b0000;">''</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: #00008b;">$error</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">No answer</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: #00008b;">$userEntered</span><span style="color: Gray;"> = </span><span style="color: Blue;">preg_replace</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">/[^0-9]/</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">''</span><span style="color: Gray;">, </span><span style="color: #00008b;">$userEntered</span><span style="color: Olive;">)</span><span style="color: Gray;">;&nbsp; &nbsp; </span><span style="color: #ffa500;">// Remove everything except numbers</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: #00008b;">$error</span><span style="color: Gray;"> == </span><span style="color: #8b0000;">''</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: #00008b;">$actualResult</span><span style="color: Gray;"> != </span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">auxGenerateHash</span><span style="color: Olive;">(</span><span style="color: #00008b;">$userEntered</span><span style="color: Gray;">, </span><span style="color: Blue;">date</span><span style="color: Olive;">(</span><span style="color: Blue;">j</span><span style="color: Olive;">))</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">date</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">G</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"> &lt;= </span><span style="color: Maroon;">1</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Green;">AND</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #00008b;">$actualResult</span><span style="color: Gray;"> == </span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">auxGenerateHash</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: #00008b;">$userEntered</span><span style="color: Gray;">, </span><span style="color: Olive;">(</span><span style="color: Blue;">intval</span><span style="color: Olive;">(</span><span style="color: Blue;">date</span><span style="color: Olive;">(</span><span style="color: Blue;">j</span><span style="color: Olive;">))</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: #ffa500;">// User has just passed midnight while writing the comment. We consider</span></li>
<li><span style="color: #ffa500;">// the time between 0:00 and 1:59 still as the day before to avoid</span></li>
<li><span style="color: #ffa500;">// error messages if user visited page on 23:50 but pressed the &quot;Submit Comment&quot;</span></li>
<li><span style="color: #ffa500;">// button on 0:15.</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: #00008b;">$error</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">Wrong answer</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$error</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: #ffa500;">/***</span></li>
<li><span style="color: #ffa500;"> * auxNoToArray&nbsp; 根据自定义字符串获取算子</span></li>
<li><span style="color: #ffa500;"> * Converts the input string, e.g. &quot;1~one, 2~two, 3~three, 4~four, ...&quot;</span></li>
<li><span style="color: #ffa500;"> * into an array, e.g.: Array([1] =&gt; one, [2] =&gt; two, [3] =&gt; three, ...)</span></li>
<li><span style="color: #ffa500;"> */</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">auxNoToArray</span><span style="color: Olive;">(</span><span style="color: #00008b;">$input</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: #00008b;">$input</span><span style="color: Gray;"> = </span><span style="color: Blue;">str_replace</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">''</span><span style="color: Gray;">, </span><span style="color: #00008b;">$input</span><span style="color: Olive;">)</span><span style="color: Gray;">;&nbsp; &nbsp; </span><span style="color: #ffa500;">// Strip whitespace</span></li>
<li><span style="color: #00008b;">$sourcearray</span><span style="color: Gray;"> = </span><span style="color: Blue;">explode</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">,</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$input</span><span style="color: Olive;">)</span><span style="color: Gray;">;&nbsp; &nbsp; </span><span style="color: #ffa500;">// Create array</span></li>
<li><span style="color: Green;">foreach</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: #00008b;">$sourcearray</span><span style="color: Gray;"> </span><span style="color: Green;">as</span><span style="color: Gray;"> </span><span style="color: #00008b;">$loopval</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: #00008b;">$temparr</span><span style="color: Gray;"> = </span><span style="color: Blue;">explode</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">~</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$loopval</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$targetarray</span><span style="color: Olive;">[</span><span style="color: #00008b;">$temparr</span><span style="color: Olive;">[</span><span style="color: Maroon;">0</span><span style="color: Olive;">]]</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$temparr</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$targetarray</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: #ffa500;">/***</span></li>
<li><span style="color: #ffa500;"> * auxGenerateHash&nbsp; 加密结果</span></li>
<li><span style="color: #ffa500;"> * Generate hash</span></li>
<li><span style="color: #ffa500;"> */</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">auxGenerateHash</span><span style="color: Olive;">(</span><span style="color: #00008b;">$inputstring</span><span style="color: Gray;">, </span><span style="color: #00008b;">$day</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: #ffa500;">// Adds the file modification time of this file</span></li>
<li><span style="color: #00008b;">$inputstring</span><span style="color: Gray;"> .= </span><span style="color: Blue;">filemtime</span><span style="color: Olive;">(</span><span style="color: Green;">__FILE__</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// Adds a unique value defined in the options</span></li>
<li><span style="color: #00008b;">$inputstring</span><span style="color: Gray;"> .= </span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">opt</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">unique</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// Add the IP address of the server under which the current script is executing.</span></li>
<li><span style="color: #00008b;">$inputstring</span><span style="color: Gray;"> .= </span><span style="color: Blue;">getenv</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">SERVER_ADDR</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// Add date</span></li>
<li><span style="color: #00008b;">$inputstring</span><span style="color: Gray;"> .= </span><span style="color: #00008b;">$day</span><span style="color: Gray;"> . </span><span style="color: Blue;">date</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">ny</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// Get MD5 and reverse it</span></li>
<li><span style="color: #00008b;">$enc</span><span style="color: Gray;"> = </span><span style="color: Blue;">strrev</span><span style="color: Olive;">(</span><span style="color: Blue;">md5</span><span style="color: Olive;">(</span><span style="color: #00008b;">$inputstring</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// Get only a few chars out of the string</span></li>
<li><span style="color: #00008b;">$enc</span><span style="color: Gray;"> = </span><span style="color: Blue;">substr</span><span style="color: Olive;">(</span><span style="color: #00008b;">$enc</span><span style="color: Gray;">, </span><span style="color: Maroon;">28</span><span style="color: Gray;">, </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> . </span><span style="color: Blue;">substr</span><span style="color: Olive;">(</span><span style="color: #00008b;">$enc</span><span style="color: Gray;">, </span><span style="color: Maroon;">9</span><span style="color: Gray;">, </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> . </span><span style="color: Blue;">substr</span><span style="color: Olive;">(</span><span style="color: #00008b;">$enc</span><span style="color: Gray;">, </span><span style="color: Maroon;">21</span><span style="color: Gray;">, </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> . </span><span style="color: Blue;">substr</span><span style="color: Olive;">(</span><span style="color: #00008b;">$enc</span><span style="color: Gray;">, </span><span style="color: Maroon;">15</span><span style="color: Gray;">, </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> . </span><span style="color: Blue;">substr</span><span style="color: Olive;">(</span><span style="color: #00008b;">$enc</span><span style="color: Gray;">, </span><span style="color: Maroon;">7</span><span style="color: Gray;">, </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// Return result</span></li>
<li><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$enc</span><span style="color: Gray;">; </span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Blue;">?&gt;</span></li></ol></div>
<p><strong>测试文件mathcheck.php:</strong></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">&lt;?php</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">include_once</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">./mathcheck.class.php</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$MathCheckObj</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">MathCheck</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #00008b;">$mc</span><span style="color: Gray;"> = </span><span style="color: Blue;">math_create</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">user_entered</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Blue;">var_dump</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">math_check</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">/***********************</span></li>
<li><span style="color: #ffa500;"> * 获取数学问题和答案</span></li>
<li><span style="color: #ffa500;"> ***********************/</span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">math_create</span><span style="color: Olive;">()</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Green;">global</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$MathCheckObj</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$MathCheckObj</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">GenerateValues</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$mc_info</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">operand1</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$MathCheckObj</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">info</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">operand1</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$mc_info</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">operand2</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$MathCheckObj</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">info</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">operand2</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$mc_info</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">result</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">&nbsp;&nbsp; = </span><span style="color: #00008b;">$MathCheckObj</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">info</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">result</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$mc_info</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">/***************</span></li>
<li><span style="color: #ffa500;"> * 验证回答结果</span></li>
<li><span style="color: #ffa500;"> ***************/</span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">math_check</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Green;">global</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$MathCheckObj</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$actual_result</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">actual_result</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$user_entered</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">user_entered</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$result</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$MathCheckObj</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">InputValidation</span><span style="color: Olive;">(</span><span style="color: #00008b;">$actual_result</span><span style="color: Gray;">, </span><span style="color: #00008b;">$user_entered</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">switch</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: #00008b;">$result</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Green;">case</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Red;">No answer</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span></li>
<li><span style="color: Green;">die</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">请回答问题,终止下面的程序</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">break</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">case</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Red;">Wrong answer</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span></li>
<li><span style="color: Green;">die</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">问题回答错误,终止下面的程序</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">break</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Green;">echo</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Red;">问题回答正确,可以继续了</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Blue;">?&gt;</span></li>
<li><span style="color: Gray;">&lt;h1&gt;测试&lt;/h1&gt;</span></li>
<li><span style="color: Gray;">&lt;form method=&quot;post&quot; action=&quot;&quot;&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&lt;input type=&quot;text&quot; name=&quot;user_entered&quot; id=&quot;user_entered&quot; value=&quot;&quot; size=&quot;22&quot; tabindex=&quot;4&quot; /&gt;</span></li>
<li><span style="color: Gray;">&lt;label for=&quot;user_entered&quot;&gt;&lt;small&gt;请回答计算结果：</span><span style="color: Blue;">&lt;?php</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">echo</span><span style="color: Gray;"> </span><span style="color: #00008b;">$mc</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">operand1</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> . </span><span style="color: #8b0000;">'</span><span style="color: Red;"> + </span><span style="color: #8b0000;">'</span><span style="color: Gray;"> . </span><span style="color: #00008b;">$mc</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">operand2</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> . </span><span style="color: #8b0000;">'</span><span style="color: Red;"> ?</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> </span><span style="color: Blue;">?&gt;</span><span style="color: Gray;">&lt;/small&gt;&lt;/label&gt;</span></li>
<li><span style="color: Gray;">&lt;input type=&quot;hidden&quot; name=&quot;actual_result&quot; value=&quot;</span><span style="color: Blue;">&lt;?php</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">echo</span><span style="color: Gray;"> </span><span style="color: #00008b;">$mc</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">result</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">; </span><span style="color: Blue;">?&gt;</span><span style="color: Gray;">&quot; /&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&lt;input type=&quot;submit&quot;/&gt;</span></li>
<li><span style="color: Gray;">&lt;/form&gt;</span></li></ol></div>
<p>如果需要静态化验证，建议采用json构造。代码就不写了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ieliwb.com/php-math-checked/feed/</wfw:commentRss>
		<slash:comments>1099</slash:comments>
		</item>
	</channel>
</rss>

