You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用personnummer.js验证瑞典个人身份号并限制年龄≥18岁?

解决方案:新增年龄未满18岁判定无效的逻辑

针对你提供的两个Node.js函数,以下是修改后的代码,新增了年龄未满18岁则判定身份号无效的逻辑:


第一个中间件函数修改版

const Personnummer = require("personnummer.js");

module.exports = (req, res, next) => {
    const ssn = req.query?.ssn || req.body?.personal_number;

    const error = {
        message: 'Personnumber is required', // 修正原拼写错误:rquired → required
        name: 'BadRequest' 
    };

    if (!ssn) {
        return next(new NotFoundError(error, 403));
    }

    let valid = Personnummer.validate(ssn);

    // 新增年龄检查:仅当身份号格式有效时解析年龄
    if (valid) {
        const age = Personnummer.parse(ssn).age;
        // 年龄未满18则标记为无效
        if (age < 18) {
            valid = false;
            error.message = 'Personnummer is valid but age is under 18';
        }
    } else {
        error.message = 'Invalid ssn';
    }

    return valid ? next() : next(new NotFoundError(error, 403));
}

修改说明:

  • 修正了原代码的拼写错误
  • 在身份号格式验证通过后,新增年龄解析与检查步骤
  • 若年龄小于18,将验证状态设为无效,并更新明确的错误提示
  • 保留原中间件的流程逻辑:验证通过则继续后续处理,否则抛出错误

第二个响应JSON的函数修改版

const Personnummer = require("personnummer.js");

module.exports = (req, res, next) => {
    try {
        const ssn = req.query?.ssn || req.body?.ssn;

        if (!ssn) {
            return res.json({valid: false, message: 'Personnumer is required'});
        }

        let valid = Personnummer.validate(ssn);
        let message = valid ? 'Valid personnumer' : 'Invalid personnumer';

        // 新增年龄检查逻辑
        if (valid) {
            const age = Personnummer.parse(ssn).age;
            if (age < 18) {
                valid = false;
                message = 'Personnummer is valid but age is under 18';
            }
        }

        const response = {
            valid,
            message
        }

        return res.json(response);

    } catch(err) {
        next(err);
    }
}

修改说明:

  • 将验证状态和提示文本改为变量,方便后续调整
  • 在格式验证通过后,解析年龄并判断是否满18
  • 若未满18,调整验证状态为无效,并更新响应提示语
  • 保留原有的异常处理逻辑,确保错误能被传递到后续中间件

内容的提问来源于stack exchange,提问作者kabax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 22:55:22