首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查输入中键入的数字在数学上是否有效

检查输入中键入的数字在数学上是否有效
EN

Stack Overflow用户
提问于 2018-06-05 05:32:16
回答 1查看 84关注 0票数 -2

我之前已经制作了输入验证器来检查电子邮件模式,密码最小和最大长度,密码确认等。

现在我手上有了新的东西,我有点卡住了,不知道从哪里开始。

我的输入必须是13个数字,它必须根据下面发布的算法(数学结果)检查插入的13个数字是否包含有效或无效的公民身份。

公民身份标识长度为13个数字,格式如下:

DDMMGGGRRSSSK

在下面的示例中,DDMMGGG表示出生的日期、月份和年份:

1010990代表1990年10月10日。

RR表示公民所在的地区,可以包含以下数字:

00至99

SSS代表性别的数字,对于男性,它必须是一个小于499的数字,对于女性,它必须大于500。

现在最后一个数字,也就是第13个数字是特殊控制号。

下面的工作公民身份ID示例以及用于获取有效/无效公民身份ID的算法:

示例: ID 0308964384007

ZZZ = (0 * 7) + (3 * 6) + (0 * 5) + (8 * 4) + (9 * 3) + (6 * 2) + (4 * 7) + (3 * 6) + (8 * 5) + (4 * 4) + (0 * 3) + (2 * 0) =0 +18 +0 +32 +27 +12 +28 +18 +40 +16 +0 +0= 191: 11 = 17 ====> 81 11-4 =7

将得到的和称为"ZZZ“。*我们将"ZZZ“除以11。”让我们调用上面操作的剩余部分"OST“。“我们从11中减去OST,然后我们得到差值,我们称之为"RAZ”(RAZ = 11-OST)。

如果rest的值为1 (OST = 1,RAZ = 10),则ID不正确

如果其余的值为0 (OST =0,即ZZZ数可被11整除),则控制数字K为0 (K = 0)

代码语言:javascript
运行
复制
if the residue number is between 1 and 11 (1 <OST <11) the control digit K is the difference between 11 and residue (K = RAZ)

如果K不同于"RAZ“ID是不正确的

我的数学和数学英语都不是最好的,但希望有人能从上面的数学例子中找出答案。

这是javascript中的工作代码片段:

代码语言:javascript
运行
复制
_validateJMBG: function(value, countryCode) {
        if (!/^\d{13}$/.test(value)) {
            return false;
        }
        var day   = parseInt(value.substr(0, 2), 10),
            month = parseInt(value.substr(2, 2), 10),
            year  = parseInt(value.substr(4, 3), 10),
            rr    = parseInt(value.substr(7, 2), 10),
            k     = parseInt(value.substr(12, 1), 10);

        // Validate date of birth
        // FIXME: Validate the year of birth
        if (day > 31 || month > 12) {
            return false;
        }

        // Validate checksum
        var sum = 0;
        for (var i = 0; i < 6; i++) {
            sum += (7 - i) * (parseInt(value.charAt(i), 10) + parseInt(value.charAt(i + 6), 10));
        }
        sum = 11 - sum % 11;
        if (sum === 10 || sum === 11) {
            sum = 0;
        }
        if (sum !== k) {
            return false;
        }


        switch (countryCode.toUpperCase()) {
            case 'BA':
                return (10 <= rr && rr <= 19);
            case 'MK':
                return (41 <= rr && rr <= 49);
            case 'ME':
                return (20 <= rr && rr <= 29);
            case 'RS':
                return (70 <= rr && rr <= 99);
            case 'SI':
                return (50 <= rr && rr <= 59);
            default:
                return true;
        }
    },

    _ba: function(value) {
        return this._validateJMBG(value, 'BA');
    },

希望有人能帮助我在angular2+中完成这件事,或者至少给我指出正确的direction.Thank,谢谢你的时间和努力!

我想要达到什么目的?

如果我触摸输入并在我的输入字段中插入13个数字,我希望它使用上面发布的算法来显示插入的ID是有效还是无效,这取决于数学结果。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50689075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档