15.4.如何创建一个Validator去验证通用商品代码(UPC)

15.4.1 问题
怎样在一个窗体内验证复数的UPC 码呢?
15.4.2 解决办法
首先创建一个validator, 然后用它来检查UPC 码的检验和是否存在及正确, 否则即返回一个错误。
15.4.3 讨论
一般商业中使用的UPC 码, 都是由12 个数字所组成的。它包含着一个隐藏的检验和, 这个数是由每个相隔3 位数之积及它们之和相加所得出的。通过以下代码来解释会比较容易去理解:
代码如下:
+展开
-ActionScript
var sum:Number = 0;
for ( var i:Number=0; i < UPC.length; i += 2){
sum += Number(UPC.charAt(i)) * 3;
}
for ( i = 1; i < UPC.length-1; i += 2) {
sum += Number(UPC.charAt(i));
}
var checkSum:Number = ( 10 - (sum % 10) ) % 10;
//如果检验和不对, 就返回一个验证错误
if ( Number(UPC.charAt(11)) != checkSum ) {
results.push(new ValidationResult(truenull"invalidUPC""Invalid UPC Number."));
return results;
}

以上的代码都是用来确保UPC 码的有效性。接下的代码就更为直接:
代码如下:
+展开
-ActionScript
package com.passalong.utils
{
import mx.validators.Validator;
import mx.validators.ValidationResult;
import mx.controls.Alert;
public class UPCValidator extends Validator
{
private var results:Array;
public function UPCValidator()
{
super();
}
override protected function doValidation(value:Object):Array
{
//把数值转换成字符串, 以方便对个别数字进行分析
var UPC:String = String(value);
// strip off decimal point from beginning -- added to force recognition of leading zeros
UPC = UPC.substring(1);
var UPCnum:Number = Number(UPC);
// 把results这个数组清空
results = [];
//呼叫doValidation()这个基础类
results = super.doValidation(value);
// Return if there are errors.
if (results.length > 0)
return results;
// 如果输入数据不是数目字或不是一个数值, 返回一个验证错误
if (isNaN(UPCnum) || !value )
{
results.push(new ValidationResult(truenull"NaN""UPC required."));
return results;
}
if ( UPC.length != 12 )
{
results.push(new ValidationResult(truenull"invalidUPCLength","Please enter a full 12-digit UPC."));
return results;
}
else
{
var sum:Number = 0;
for ( var i:Number=0; i < UPC.length; i += 2)
sum += Number(UPC.charAt(i)) * 3;
for ( i = 1; i < UPC.length-1; i += 2) {
sum += Number(UPC.charAt(i));
}
var checkSum:Number = ( 10 - (sum % 10) ) % 10;
//如果检验和不正确, 返回一个验证错误
if ( Number(UPC.charAt(11)) != checkSum )
{
results.push(new ValidationResult(truenull"invalidUPC""Invalid UPC Number."));
return results;
}
return results;
}
}
}
}

特别鸣谢Mike Orth 提供他的个人意见跟代码的指导。

加支付宝好友偷能量挖...


评论(0)网络
阅读(102)喜欢(0)flash/flex/fcs/AIR