当前位置: 首页 > 知识库问答 >
问题:

需要添加信用卡号码而不带破折号

欧盛
2023-03-14

所以信用卡号码有效的条件之一是“前4位数字之和必须比后4位数字之和少1”,我相信问题可能是它把破折号算作一个数字,但不确定。规则4是所有数字的和必须被4整除,这似乎有效,但规则5不是。

int sum = ccNumber.chars().filter(Character::isDigit).map(Character::getNumericValue).sum();
        
        if(sum%4!=0){
            valid = false;
            errorCode = 4;
            return;
        }
        
// set values and for loop for fifth rule.
      
  String digits = ccNumber.replaceAll("[ˆ0-9]",""); 
        int firstfourdigits = 0;
        int lastfourdigits = 0;
       
        for(int i=0; i<4; i++)
            firstfourdigits = firstfourdigits + Character.getNumericValue(ccNumber.charAt(i));
        for (int i=0, m = ccNumber.length()-1; i<4; i++, m--)
            lastfourdigits = lastfourdigits + Character.getNumericValue(ccNumber.charAt(m));
            

// mutator for fifth rule
          
        if(lastfourdigits!= firstfourdigits -1){
            valid = false;
            errorCode = 5;
            return;
        }

对不起,我对编码很陌生。

共有1个答案

袁轶
2023-03-14

编辑,因为您修改了您的问题。原来的anwser到原来的问题在底部部分

您目前拥有的代码是接近的,但这里和那里有一些错误。

>

  • 只过滤掉数字:用于过滤掉所有非数字字符的代码应该有效,但在下面的代码中,您不再在循环中使用此过滤值。

    firstfourdigits + Character.getNumericValue(ccNumber.charAt(i));
    
    firstfourdigits = firstfourdigits + Character.getNumericValue(digits.charAt(i));
    

    这两个变化应该给你的结果,你要求。结合这些更改,我们得到下面的代码示例

        String digits = ccNumber.replaceAll("[ˆ0-9]", "");
        int firstfourdigits = 0;
        int lastfourdigits = 0;
    
        for (int i = 0; i < 4; i++)
            firstfourdigits = firstfourdigits + Character.getNumericValue(digits.charAt(i));
       
        for (int i = 0, m = ccNumber.length() - 1; i < 4; i++, m--) 
            lastfourdigits = lastfourdigits + Character.getNumericValue(digits.charAt(m));
        
          
        if(lastfourdigits!= firstfourdigits + 1){
            valid = false;
            errorCode = 5;
            return;
        }
    

    上面的示例应该适用于您所要求的内容,并且基于您的代码。但是,可以对代码进行一些优化,使其更易读

    • 在for循环中使用括号:为了更清楚地说明for循环中有哪些内容,哪些不是,我建议您使用花括号。虽然它们不是必需的,但它们将非常清楚地表明什么在for循环中,什么不在for循环中,并将防止在for循环中添加额外内容时难以发现问题
    • 使用短表示法进行加法:可以使用+=firstfourdigits=firstfourdigits+character.getNumericValue(digits.charat(i));,而不是编写+=的短表示法。这将取等式左侧的值,并计算右侧该值的和。FirstFourDigits+=character.getNumericValue(digits.charat(i));

    代码如下所示:

        String digits = ccNumber.replaceAll("[ˆ0-9]", "");
        int firstfourdigits = 0;
        int lastfourdigits = 0;
    
        for (int i = 0; i < 4; i++){
            firstfourdigits += Character.getNumericValue(digits.charAt(i));
        }
    
        for (int i = 0, m = ccNumber.length() - 1; i < 4; i++, m--) {
            lastfourdigits += Character.getNumericValue(digits.charAt(m));
        }
          
        if(lastfourdigits!= firstfourdigits + 1){
            valid = false;
            errorCode = 5;
            return;
        }
    

    您可以使用character.isDigit(char)。为了简化for循环,您甚至可以使用流来获取和

        int sum = ccNumber.chars().filter(Character::isDigit).map(Character::getNumericValue).sum();
    
        if (sum % 4 != 0) {
            valid = false;
            errorCode = 4;
            return;
        }
    
    • .chars():这将创建一个包含所提供字符串中所有字符的流,以便我们可以一个接一个地循环这些字符
    • .filter(character::ISDigit):这将过滤掉所有不是数字的字符
    • .map(character::GetNumericValue):这将从字符映射流到它们的数值,以便我们可以进一步使用它们
    • sum()将计算流中当前数值的总和

  •  类似资料:
    • 可以设置文本样式,以便在出现换行符之前添加破折号。 示例: Lorem ipsum dolor坐在那里,奉献给我们,我们的工作和伟大的礼物。我们的服务,我们的服务-------------------------------------------------------- 我爱你,我爱你,我爱你,我爱你,我爱你,我爱你,我爱你,圣骑士-------------------------------

    • 问题内容: 如何从不带破折号的字符串中创建java.util.UUID? 问题答案: Clojure的带 标签文字是对的传递。并且,将其除以“-”并将其转换为两个值。(UUID的格式已标准化为8-4-4-4-12十六进制数字,但“-”实际上仅用于验证和视觉识别。) 直接的解决方案是重新插入“-”并使用。 如果您想要没有正则表达式的内容,则可以使用和。

    • 我正试图用Dash构建一个仪表板,它由一系列图块(文本)组成,如下图所示。 我试图构建一个组件来重用它,并构建下面的布局。每个框将包含标题、值和描述,如下所示。 有可用的组件吗?有人可以帮助我任何基本的想法/代码? 提前谢谢!

    • 我使用的是libimobiledevice,每当我需要用ideviceInstaller将一个包推到iOS设备时,我就会面临iPhoneXR设备的问题。这个问题是由于UDID造成的:没有指定UDID的idevicepair会工作,但问题是我有多个设备连接到我的机器上。错误消息:IDevicePAIR-U 00008020-000625E#########IDevicePAIR:指定的UDID无效(

    • 问题内容: 我开始学习一些JavaScript,并且了解在命名标识符时不允许使用破折号。但是,在CSS中,ID和类通常使用破折号。 在CSS中使用破折号是否会干扰javascript交互?例如,如果我要使用。我已经尝试了一些使用getElementByID并将破折号作为div ID的名称的示例,并且它可以工作,但是我不确定在所有其他情况下是否都是这种情况。 问题答案: 在ID(或类名,如果您选择的

    • 我试图将像“plex”或“emby”这样的实时代码转换与我的应用程序集成在一起。 我可以服务dash内容到shaka-player或dash.js,但只有在“现场模式”。但我想通过玩家来实现搜索。 我看了一下plex,为了启用这一点,他们创建了自己的mpd文件和持续时间,这样玩家就有了一个完整的搜索栏。 然而,当寻找时,玩家会要求一个段号,如:449。我需要停止ffmpeg并使用偏移量重新启动,但