如何用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
相关产品推荐
相关产品推荐

