所以信用卡号码有效的条件之一是“前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;
}
对不起,我对编码很陌生。
编辑,因为您修改了您的问题。原来的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;
}
上面的示例应该适用于您所要求的内容,并且基于您的代码。但是,可以对代码进行一些优化,使其更易读
+=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并使用偏移量重新启动,但