对于那些回答我使用 simplecaptcha API 1.2(如何在 Audio 和 Captcha Image 之间同步代码)的问题的人,这里遵循我的结论,以便我们之间分享。
步骤 1_) AudioCaptcha 原始实现只接受数字,因此,您必须使用 NumberAnswerProducer 而不是使用 DefaultTextProducer
TextProducer tp = new NumbersAnswerProducer(4,true);
new AudioCaptcha.Builder()
.addVoice()
.addAnswer(tp)
.build());
您可以运行测试,如果您尝试将 DefaultTextProducer() 传递给 AudioCaptcha 构建器,它将失败。
步骤 2_) 为 Captcha 和 AudioCaptcha 共享相同的 TextProducer
我从 SimpleCaptcha 的 GIT 存储库中克隆了项目,以了解有关“AudioCaptcha.Builder().addAnswer(tp)”和 Captcha.Builder(400, 100).addText(tp) 的更多信息
如果你尝试这个,你会看到,甚至共享同一个 TextProducer 实例 tp = new NumbersAnswerProducer(4,true);对于两者,您将永远(我的意思是永远相信我),图像和音频背后的不同代码。
为什么?
因为在 .addAnswer(tp) 和 .addText(tp) 的实现之后,代码调用了一个名为 .getText() 的方法,即使对于 TextProducer 的同一个实例也是如此。而这个getText背后有一个随机码:
public String getText() {
String capText = "";
for (int i = 0; i < _length; i++) {
capText += _srcChars[RAND.nextInt(_srcChars.length)];
}
return capText;
}
因此,同样,即使使用相同的 TextProducer 实例,每次调用 .addAnswer(tp) 和 .addText(tp) 时都会有不同的代码,因为在这些人后面它们会调用 getText()。
最后,我发现解决这个问题的一种方法是,我必须在 TextProducer 后面创建自己的 getText() 实现,才能让 Captcha 和 AudioCaptcha 具有相同的值。
最好的问候