Luhn算法PHP实现 发表于 2019-02-22 | 更新于 2021-02-19 | 分类于 algorithm 关于Luhn算法参考: https://en.wikipedia.org/wiki/Luhn_algorithm https://baike.baidu.com/item/Luhn算法 PHP代码实现1234567891011121314151617181920212223242526272829303132333435363738394041class Luhn{ /** * 补填校验位 * @param string $rawNo 原始号码 * @return string 补填校验位后的号码 */ public static function gen($rawNo) { return $rawNo . self::calcCheckNum($rawNo); } /** * 校验给定数据 * @param string $no 需要校验的数据 * @return bool true:通过|false:不通过 */ public static function verify($no) { $rawNo = substr($no, 0, -1); $checkNo = intval(substr($no, -1)); return $checkNo == self::calcCheckNum($rawNo); } /** * 计算校验值 * @param string $rawStr 原始字符串(不含校验位) * @return int 校验值 */ private static function calcCheckNum($rawStr) { $strrev = strrev($rawStr); $sum = 0; for ($i = 0; $i < strlen($strrev); $i++) { $val = intval($strrev[$i]); $sum += ($i % 2 == 0) ? ($val > 4 ? (2 * $val - 9) : (2 * $val)) : $val; } $ret = 10 - $sum % 10; return $ret == 10 ? 0 : $ret; }}