<?php

function password_hash_bcrypt($password) {
    return password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
}

function password_verify_bcrypt($password, $hash) {
    return password_verify($password, $hash);
}

function is_password_hash($hash) {
    return strpos($hash, '$2y$') === 0 || strpos($hash, '$2a$') === 0;
}

function validatePassword($password) {
    $errors = [];
    
    // 长度检查
    if (strlen($password) < 8) {
        $errors[] = "密码长度至少8位";
    }
    
    // 复杂度检查
    if (!preg_match('/[A-Z]/', $password)) {
        $errors[] = "密码必须包含大写字母";
    }
    
    if (!preg_match('/[a-z]/', $password)) {
        $errors[] = "密码必须包含小写字母";
    }
    
    if (!preg_match('/[0-9]/', $password)) {
        $errors[] = "密码必须包含数字";
    }
    
    if (!preg_match('/[!@#$%^&*(),.?":{}|<>]/', $password)) {
        $errors[] = "密码必须包含特殊字符";
    }
    
    // 常见密码检查
    $commonPasswords = ['password', '12345678', 'qwerty', 'admin', 'root'];
    if (in_array(strtolower($password), $commonPasswords)) {
        $errors[] = "不能使用常见密码";
    }
    
    return $errors;
}

// 密码强度评分
function getPasswordStrength($password) {
    $score = 0;
    
    // 长度加分
    $score += min(strlen($password) / 2, 4);
    
    // 字符类型加分
    if (preg_match('/[a-z]/', $password)) $score += 1;
    if (preg_match('/[A-Z]/', $password)) $score += 1;
    if (preg_match('/[0-9]/', $password)) $score += 1;
    if (preg_match('/[!@#$%^&*(),.?":{}|<>]/', $password)) $score += 2;
    
    // 唯一字符加分
    $uniqueChars = count(array_unique(str_split($password)));
    $score += min($uniqueChars / 2, 3);
    
    return min($score, 10);
}
?>