Duvida ao codigo

6 respostas
L

galera não to entendo esse comando

alguem pode explicar

public static boolean isFMod11(String strNumero, String digitoProibido) {

		strNumero = Utils.ClipLiteral(strNumero);

		if (!strNumero.equals("00") && !strNumero.equals("000") && !strNumero.equals("0000") && !strNumero.equals("00000")){

			char digito = strNumero.charAt(strNumero.length() - 1);

			strNumero = strNumero.substring(0, strNumero.length() - 1);

			String digitoModulo11 = getDigitoModulo11(strNumero, "", 7, digitoProibido);

			if (digitoModulo11 == null) {
				return false;
			}
					
			return (String.valueOf(digito).equals(digitoModulo11));

		}else{
			return false;
		}

	}

6 Respostas

drsmachado

Validação de cpf ou alguma validação em específico.
Ele recebe o número, quebra em substrings e verifica se o dígito está correto.

L

validação de conta corrente

tipo assim

“2869-0”

eu to debug , pelo que entendi ele verifica os numeros , mas na dv ele esta quebrando esse 0 e não deixa passar…

tem como fazer isso…

drsmachado

O número do DV não coincide com a sequência lógica do algoritmo.
É como um validador de cpf, ele pega parte do número (os 9 primeiros do cpf) e, aplicando um algoritmo específico, checa se os 2 últimos conferem com a lógica.

L

com esse digito de conta ele naum esta validando essa conta

2869-0

mas ela é valida, só não consigo achar aonde fazer isso.
se poder me explicar !!

agradeço.

olha só depois ele vem pra cá

public static String ClipLiteral(String arg) {

		if(arg == null){
			return null;
		}else{
			StringBuffer ret = new StringBuffer();

			for (int i = 0; i < arg.length(); i++) {
				if (!Invalido(arg.substring(i, i + 1))) {
					ret.append(arg.substring(i, i + 1));
				}
			}
			return ret.toString();
		}
	}

em seguida

public static String getDigitoModulo11(String strFunc, String strSufixo, Integer intFim, String strProib) {

		if (strFunc == null || strSufixo == null || intFim == null || strProib == null) {
			return null;
		}

		// strFunc = strFunc.replaceAll("[^0-9]", "");

		Integer intSoma = 0, intProduto = 0;
		Integer intMulti = 0, intTamFunc = 0;
		String strDigito = "";

		if (strFunc.trim().equals("")) {
			return strDigito;
		}

		strFunc = strSufixo.concat(strFunc);
		intTamFunc = strFunc.length();
		intMulti = 1;

		for (int i = 0; i < intTamFunc; i++) {
			if (i == intFim - 1) {
				intMulti = 2;
			} else {
				intMulti++;
			}

			int inicioRecorte = intTamFunc - i;
			int fimRecorte = inicioRecorte;

			inicioRecorte--;

			String recorte = strFunc.substring(inicioRecorte, fimRecorte);
			intProduto = Integer.parseInt(recorte) * intMulti;
			intSoma += intProduto;
		}

		int sngDigito = 11 - (intSoma % 11);

		if (strProib.trim().equals("10")) {
			if (sngDigito == 10 || sngDigito == 11) {
				sngDigito = 0;
			}
		} else if (strProib.trim().equals("9")) {
			if (sngDigito > 9) {
				sngDigito = 0;
			}
		} else if (strProib.trim().equals("P")) {
			if (sngDigito == 11) {
				sngDigito = 0;
			}
			if (sngDigito == 10) {
				strDigito = "P";
			}
		}

		if (strProib.trim().equals("P") && strDigito.trim().equals("P")) {
			return strDigito;
		} else {
			return String.valueOf(sngDigito);
		}
	}

e aqui onde é chamado

if(txtAgencia == e.getSource() || txtDVAgencia == e.getSource()) {

				if(!txtAgencia.getText().equals("") && !txtDVAgencia.getText().equals("")) {
					
					if(!Utils.isFMod11(txtAgencia.getText().concat(txtDVAgencia.getText()),"P")) {    <-----------------
															
						frmProposta.setFormularioValido(false);
						txtAgencia.setText("");
						txtDVAgencia.setText("");						  
						new Mensagem(this, "Aviso", "Agência inválida.", Mensagem.MSG_BOTAO_OK, Mensagem.MSG_ICONE_ALERTA);
						txtAgencia.requestFocus();
					}
				}
			}

			/* Conta e digito verificador 
			 * Digito proibido igual a P.
			 */
L

.

marcelo.bellissimo

MOD11 é um algoritmo de verificação de dígitos, é bem conhecido, mas eu nunca cheguei á usar pra poder explicar como funciona e qual o propósito principal dele… segue uma página explicando o algoritmo:

http://www.pgrocer.net/Cis51/mod11.html

Esse número após o traço seria o “check digit”, digito de verificação, calculado com esse algoritmo e usando os números que vem antes do traço…

Criado 1 de fevereiro de 2011
Ultima resposta 1 de fev. de 2011
Respostas 6
Participantes 3