///inteq/library/numbers.js //includeOnce -1899925547 ///products/INTEQengine/library/Validators.ijs //includeOnce -1898144910 function digito2a9Modulo11DeTrazPraFrente( str ) { /* O cálculo do dígito verificador módulo 11 é feito da seguinte forma: os dígitos são multiplicados da direita para a esquerda pela seqüência de 2 a 9, ou seja, por 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, e assim por diante; os resultados do produto dos dígitos pelos valores da seqüência são somados; a soma é dividida por 11, e o resto da divisão é obtido; o dígito verificador é calculado subtraindo o resto de 11; quando o resto for igual a 0 ou 1 o dígito verificador será igual a 0 */ str = str + '' var soma = 0 var peso = 2 for ( var i = str.length - 1; i >= 0; i -= 1 ){ soma += peso * Number( str.charAt(i) ) peso = ( peso == 9 ? 2 : peso + 1 ) } return soma % 11 } // Função utilizada na validação de um CNPJ e dígitos C1, C2 e C3 de um cheque function digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( str ){ var resto = digito2a9Modulo11DeTrazPraFrente( str ) var digito = ( resto < 2 ? 0 : 11 - resto ) return digito.toString() } function digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11AteDigito10( str ){ var resto = digito2a9Modulo11DeTrazPraFrente( str ) var digito = ( resto < 1 ? 0 : 11 - resto ) return digito.toString() } // Função utilizada na validação de um CPF function digito9a1Modulo11DeTrazPraFrente( str ) { str = str + '' var soma = 0 var peso = 9 for ( var i = str.length - 1; i >= 0; i -= 1 ){ soma += peso * Number( str.charAt(i) ) peso = ( peso == 1 ? 9 : peso - 1 ) } var resto = soma % 11 var digito = ( resto > 9 ? 0 : resto ) return digito.toString() } // Função utilizada na validação de um CMC7 function digito2a1Modulo10DeTrazPraFrente( str ){ str = str + '' var digitos = '' var peso = 2 for ( var i = str.length - 1; i >= 0; i-- ){ digitos = peso * Number( str.charAt(i) ) + digitos peso = ( peso == 2 ? 1 : 2 ) } var soma = 0 for ( var i = 0; i < digitos.length; i++ ){ soma += Number( digitos.charAt(i) ) } var resto = soma % 10 var digito = ( resto ? 10 - resto : 0 ) return digito.toString() } // funções para tratamento de códigos EAN e UPC function digitoEan( eanSemDigito ) { eanSemDigito = '' + Math.abs(eanSemDigito) var multiplicador = 0 var contaDigitos = 0 var digito = 0 var soma = 0 for ( var i = eanSemDigito.length - 1 ; i >= 0 ; i-- ) { digito = stringToInteger( eanSemDigito.charAt( i)) contaDigitos++ if ( contaDigitos % 2 == 0 ) { multiplicador = 1 } else { multiplicador = 3 } soma += digito * multiplicador } var digitoVerificador = 10 - soma % 10 if ( digitoVerificador == 10 ) { digitoVerificador = 0 } return '' + digitoVerificador } function eanInternoDaChave( chave, inicial ) { if ( chave == null ) chave = 0 if ( inicial == undefined) { if(chave < 0) inicial = '29' else inicial = '25' } if(inicial != '29' && chave < 0) { throw new Error("Chaves negativas precisam ter o prefixo igual a 29.") } var result = '0000000000' + chave result = inicial + result.substr( result.length - 10, 10) return result + digitoEan( result) } function eEanInterno( codigo ) { codigo = '' + codigo if ( codigo.length == 13 ) { var inicial = Number(codigo.substr( 0, 2)) if ( !isNaN( inicial ) && ( inicial >= 20 && inicial <= 29 ) ){ if ( codigo.substr( 12, 1) == digitoEan( codigo.substr( 0, 12)) ) return true } } return false } function eEan( codigo ) { codigo = '' + codigo if ( codigo.length == 13 ) { var inicial = Number( codigo.substr( 0, 2 ) ) if ( codigo.substr( 12, 1 ) == digitoEan( codigo.substr( 0, 12 ) ) ) return true } return false } function chaveDoEanInterno( ean ) { var inicial = ean.substr(0,2) if(inicial == '29') { return -stringToInteger(ean.substr( 2, 10)) } else { return stringToInteger(ean.substr( 2, 10)) } } /** _InformacaoEanInterno @private @param {string} Texto que indentifica o tipo de EAN interno. Valores possíveis: 'Recurso', 'Atendente', 'Cliente' e 'Cartão Presente'. @param {integer} Propriedade utilizada para recursos, atendentes e clientes. Representa a chave dos mesmos. @param {number} Propriedade utilzada para cartões presentes. Valor do cartão presente com 3 digitos. @param {string} Propriedade utilzada para cartões presentes. Número de série do cartão presente. @param {boolean} Indica se a informação deve corresponder a uma entidade cadastrada. */ function _InformacaoEanInterno( tipo, chave, valor, numeroSerie, eEntidade ){ this.tipo = tipo this.chave = chave this.valor = valor this.numeroSerie = numeroSerie this.eEntidade = eEntidade } /** pegaInformacaoSobreEanInterno @param {string} Código EAN @return {Object} Instancia do objeto _InformacaoEanInterno */ function pegaInformacaoSobreEanInterno( ean ){ ean = '' + ean if ( !eEanInterno( ean) ) { throwError( 'Um código de EAN interno deve possuir 13 dígitos, seus dois primeiros dígitos devem estar entre 20 e 29 e seu dígito deve ser calculado corretamente.') } var tipo = 'Recurso' var chave = null var valor = null var numeroSerie = null var eEntidade = false var iniciais = ean.substr( 0, 2 ) if ( iniciais == 25 ){ tipo = 'Atendente' chave = chaveDoEanInterno( ean ) eEntidade = true } else if ( iniciais == 26 ){ tipo = 'Cliente' chave = chaveDoEanInterno( ean ) eEntidade = true } else if ( iniciais == 27 ){ tipo = 'Cartão Presente' valor = ean.substr( 2, 3 ) numeroSerie = ean } else { chave = chaveDoEanInterno( ean ) } return new _InformacaoEanInterno( tipo, chave, valor, numeroSerie, eEntidade ) } // Verifica se um texto é um CPF/CNPJ valido function cpfCnpjValido( str ) { str = onlyNumbers( str ) if ( str.length == 14 ){ // CNPJ var digito1 = digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( str.substr( 0, 12 ) ) return str.substr( 12, 2 ) == digito1 + digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( str.substr( 0, 12 ) + digito1 ) } else { if ( str.length == 11 ){ // CPF var digito1 = digito9a1Modulo11DeTrazPraFrente( str.substr( 0, 9 ) ) return str.substr( 9, 2 ) == digito1 + digito9a1Modulo11DeTrazPraFrente( str.substr( 1, 8 ) + digito1 ) } else { return false } } } // Verifica se é uma pessoa física /** Verifica se é uma pessoa física @param {Integer} Código da entidade @return {Boolean} */ function ePessoaFisica( pessoa ) { var cgccpf = formataCpfCnpj( pessoa.cgccpf ) return cgccpf && cgccpf.length === 14 } /** * Formata o CPF ou o CNPJ, dependendo da quantidade de caracteres. * * @param {integer} value - Valor do CPF ou CNPJ. * @return {string} CPF ou CNPJ formatado. * @return {string} */ function formataCpfCnpj( value ){ var valueStr = value + '' if ( valueStr ){ var cpfCnpj = onlyNumbers( valueStr ) if ( cpfCnpjValido( cpfCnpj ) ){ // Garante a formatação correta if ( cpfCnpj.length == 11 ){ return cpfCnpj.substr( 0, 3 ) + '.' + cpfCnpj.substr( 3, 3 ) + '.' + cpfCnpj.substr( 6, 3 ) + '-' + cpfCnpj.substr( 9, 2 ) } else { return cpfCnpj.substr( 0, 2 ) + '.' + cpfCnpj.substr( 2, 3 ) + '.' + cpfCnpj.substr( 5, 3 ) + '/' + cpfCnpj.substr( 8, 4 ) + '-' + cpfCnpj.substr( 12, 2 ) } } else { return null } } else { return null } } // Verifica de PIS é válido function pisValido( str ) { str = onlyNumbers( str) if ( str.length == 11 ) { return str.charAt( 10) == digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( str.substr( 0, 10)) } return false } // retorna [ c1, c2, c3 ] function pegaC1C2C3( comp, bco, ag, conta, cheque ) { var t = '000' + onlyNumbers( comp ) var cba = t.substr( t.length - 3 ) t = '000' + onlyNumbers( bco ) cba += t.substr( t.length - 3 ) t = '0000' + onlyNumbers( ag ) cba += t.substr( t.length - 4 ) var c1 = digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( cba ) var c2 = digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( onlyNumbers( conta ) ) var c3 = digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( onlyNumbers( cheque ) ) return [c1, c2, c3] } function c1Valido( c1, comp, bco, ag ) { var t = '000' + onlyNumbers( comp ) var cba = t.substr( t.length - 3 ) t = '000' + onlyNumbers( bco ) cba += t.substr( t.length - 3 ) t = '0000' + onlyNumbers( ag ) cba += t.substr( t.length - 4 ) return c1 == digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( cba ) } function c2Valido( c2, conta ) { conta = onlyNumbers( conta ) // return c2 == digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( conta ) return (c2 == digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( conta )) || (c2 == digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( conta.substr(0,conta.length-1) ) ) } function c3Valido( c3, cheque ) { cheque = onlyNumbers( cheque ) return c3 == digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( cheque ) } // funções para tratamento de códigos de barras CMC7 usados em cheques function cmc7Valido( value, showMessageError ) { /* CMC7 - exemplo: <23731842<0010034895>777504362409: a b c d e f g h i 237 3184 2 001 003489 5 7 7750436240 9 a Número do Banco 237 b Número da Agência 3184 c Dígito verificador da Comp+Cheque+Tipificação 2 d Comp (câmara de compensação - 018-SP, 001-RJ, etc) 001 e Número do cheque 003489 f Tipificação(5-Comum 6-Bancário 7-Salário 8-Administr. 9-CPMF) 5 g Dígito verificador do Banco+Agência: 7 h Número da Conta 7750436240 i Dígito verificador da Conta* 9 *O Dv da Conta no CMC7 não tem nada haver com o Dv da Conta na Linha1, este inclusive faz parte do número da conta no CMC7. */ value = onlyNumbers( '' + value ) // certifica-se de que estamos tratando com String var result = false if ( value.length == 30 ) { var banco = value.substr( 0, 3 ) var agencia = value.substr( 3, 4 ) var d1 = value.substr( 7, 1 ) var comp = value.substr( 8, 3 ) var cheque = value.substr( 11, 6 ) var tip = value.substr( 17, 1 ) var d2 = value.substr( 18, 1 ) var conta = value.substr( 19, 10 ) var d3 = value.substr( 29, 1 ) result = ( digito2a1Modulo10DeTrazPraFrente( comp+cheque+tip ) == d1 ) && ( digito2a1Modulo10DeTrazPraFrente( banco+agencia ) == d2 ) && ( digito2a1Modulo10DeTrazPraFrente( conta ) == d3 || digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( conta ) == d3 ) if ( !result && !!showMessageError ){ throw new DetailedError( 'Valor do cmc7 é inválido!', 'Certifique-se que o valor foi informado corretamente.', 'c1: ' + digito2a1Modulo10DeTrazPraFrente( comp+cheque+tip ) + '. d1:' + d1 + '. ' + 'c2: ' + digito2a1Modulo10DeTrazPraFrente( banco+agencia ) + '. d2:' + d2 + '. ' + 'c3(10): ' + digito2a1Modulo10DeTrazPraFrente( conta ) + 'c3(11): ' + digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( conta ) + '. d3:' + d3 + '.', 'validators.js cmc7Valido' ) } } else if ( !!showMessageError ) { throw new DetailedError( 'Tamanho do cmc7 é inválido!', 'Certifique-se que o tamanho tem 30 posições.', 'validators.js cmc7Valido' ) } return result } function quebraCmc7EmCompBancoAgenciaContaCheque( value ) { value = onlyNumbers( '' + value ) cmc7Valido( value, true ) var banco = value.substr( 0, 3 ) var agencia = value.substr( 3, 4 ) var comp = value.substr( 8, 3 ) var cheque = value.substr( 11, 6 ) var tipoConta = null // Identificar a quantidade de dígitos da conta de cada banco e inserir no array abaixo var contaCom5Digitos = [ '756' /* Sicoob */ ] var contaCom6Digitos = [ '001' /* Banco do Brasil */, '004' /* Banco do Nordeste */, '035' /* BEC */, '341' /* Itau */, '748' /* Unicred */, '399' /* HSBC */ ] var contaCom7Digitos = [ '356' /* Banco Real */, '409' /* Unibanco */, '237' /* Bradesco */, '003' /* BASA */ ] var contaCom8Digitos = [ '353' /* Santander */ , '033' /* Banespa */ ] var contaCom9Digitos = [ '104' /* CEF */, '389' /* Mercantil do Brasil*/, '453' /* Banco Rural */, '320' /*BIC Banco*/ ] var contaCom10Digitos = [ '037' /* BANPARA */, '039' /* BEP */, '041' /* Banrisul */ ] if ( contaCom5Digitos.indexOf( banco ) > -1 ){ var conta = value.substr( 24, 5 ) } else if ( contaCom6Digitos.indexOf( banco ) > -1 ){ var conta = value.substr( 23, 6 ) } else if ( contaCom7Digitos.indexOf( banco ) > -1 ){ var conta = value.substr( 22, 7 ) } else if ( contaCom8Digitos.indexOf( banco ) > -1 ){ var conta = value.substr( 21, 8 ) } else if ( contaCom9Digitos.indexOf( banco ) > -1 ){ var conta = value.substr( 20, 9 ) } else if ( contaCom10Digitos.indexOf( banco ) > -1 ){ var conta = value.substr( 19, 10 ) } else { // se o banco ainda não estiver cadastrado assume a conta com 6 dígitos var conta = value.substr( 23, 6 ) } if ( banco == "104" ) { tipoConta = conta.substr(0,2) } return [ comp, banco, agencia, conta, cheque, tipoConta ] /* Alterado pela nova função acima value = onlyNumbers( '' + value ) cmc7Valido( value, true ) var banco = value.substr( 0, 3 ) var agencia = value.substr( 3, 4 ) var comp = value.substr( 8, 3 ) var cheque = value.substr( 11, 6 ) // Alguns bancos acrescentam prefixos na conta do CMC7 para identificar o tipo de conta. // O Bradesco coloca um prefixo 775. // O BB coloca os prefixos "01", "02" e "03" // Portanto, sempre iremos ignorar os 3 primeiros caracteres da conta var bancosComDigitoAMais = [ '409' /* Unibanco * /, '104' /* CAIXA * /, '237' /* Bradesco * / ] if ( bancosComDigitoAMais.indexOf( banco ) == -1 ){ var conta = value.substr( 23, 6 ) } else { var conta = value.substr( 22, 6 ) } return [ comp, banco, agencia, conta, cheque ] */ } function validaBanco( value ) { var dsBancos = connection.cloneLocalCacheByClass( -1897148036 /* Bancos Febraban */ ) dsBancos.indexFieldNames = "CODIGO" if ( dsBancos.find( value ) ) { return dsBancos.codigo } else { throwError('O banco informado não existe na tabela de Bancos da Febraban. Informe um banco válido.') return false // remove warning } } // Função que gera e parseia Código de Barras e Linha Digitável em Boletos Bancários, estrutura baseada no modelo do Banco do Brasil // A diferença estre bancos está na geração dos campos livres no código de barras. // Propriedades: banco, moeda, vencimento, valor, nossoNumero, agencia, codCedente, carteira, convenio, servico, linhaDigitável, codigoBarra. // Métodos: parseLinhaDigitavel( linhaDigitavel ) function Boleto( banco, moeda, vencimento, valor, nossoNumero, agencia, codCedente, carteira, convenio, servico ) { // Properties // Privates this.dataBase = new Date( 1997, 9, 7) // 07.10.1997 this.strLinhaDigitavel = '' this.strCodigoBarra = '' this.strBanco = '' this.valorTit = 0 this.dataVencimento = new Date() // Publics this.moeda = '' this.nossoNumero = nossoNumero this.codCedente = codCedente this.agencia = agencia this.carteira = carteira this.convenio = convenio this.servico = servico // Functions function validaValor( value ) { if ( typeof value == 'number' ) { return value } else { throwError('O parâmetro "valor" não é um número válido! Informe um valor válido.' + typeof value) return false // remove warning } } function validaVencimento( value ) { if ( typeof value == 'string' ) { return stringToDate( value ) } else { return value } } function calculaCampoLivre( nossoNumero, agencia, codCedente, carteira, convenio, servico ) { /* Campo Livre: modelo do Banco do Brasil ........................................................... N. POSICOES PICTURE USAGE CONTEUDO ........................................................... 01 020 a 030 9/011/ Display Nosso-número 02 031 a 034 9/004/ Display Agencia (a) 03 035 a 042 9/008/ Display Código do cedente 04 043 a 044 9/002/ Display Carteira ............................................................... */ var result = '' if ( convenio.length == 6 ) { result = padString( onlyNumbers(convenio), 6, 'right', '0') + padString( onlyNumbers(nossoNumero), 17, 'right', '0') + padString( servico, 2, 'right', '0') } else { result = padString( onlyNumbers(nossoNumero), 11, 'right', '0') + padString( onlyNumbers(agencia), 4, 'right', '0') + padString( onlyNumbers(codCedente), 8, 'right', '0') + padString( carteira, 2, 'right', '0') } return result } // Seta valores na instância do objeto if ( moeda ) { this.moeda = moeda } else { this.moeda = '9' // Real } if ( banco ) { this.strBanco = validaBanco( banco) } if ( valor ) { this.valorTit = validaValor( valor) } if ( vencimento ) { this.dataVencimento = validaVencimento( vencimento) } // Métodos this.getBanco = function () { return this.strBanco } this.setBanco = function ( value ) { this.strBanco = validaBanco( value) return this.strBanco } this.getValor = function () { return this.valorTit } this.setValor = function ( value ) { this.valorTit = validaValor( value) return this.valorTit } this.getVencimento = function () { return this.dataVencimento } this.setVencimento = function ( value ) { this.dataVencimento = validaVencimento( value) return this.dataVencimento } this.getFatorVencimento = function () { return Math.floor( this.dataVencimento - this.dataBase ) } this.setCodigoBarra = function ( value ) { throwError('Não é permitido alterar o valor do Código de Barras. Modifique os parâmetros e leia novamente a propriedade.') } this.getCodigoBarra = function () { /*............................................................... N. POSIÇÕES PICTURE USAGE CONTEÚO ............................................................... 01 001 a 003 9/003/ Display 001 02 004 a 004 9/001/ Display 9 'Real' 03 005 a 005 9/001/ Display DV '*' 04 006 a 009 9/004/ Display fator de vencimento 05 010 a 019 9/008/v99 Display Valor 06 020 a 044 9/025/ Display CAMPO LIVRE */ if ( ! this.nossoNumero || ! this.agencia || ! this.codCedente || ! this.carteira || !this.convenio || !this.servico) { throwError('Não foram informados todos os parâmetros necessários. Certifique-se de que foram informados os parâmetros: Nosso Número, Agência, Cod Cedente, Carteira, Convênio, Serviço.') } var campo1 = this.strBanco.substr( 0, 3 ) + this.moeda var dv1 = digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( campo1) var campo2 = this.fatorVencimento + padNumber( this.valorTit, 10, 2, '') var campo3 = calculaCampoLivre( this.nossoNumero, this.agencia, this.codCedente, this.carteira, this.convenio, this.servico ) // padString( onlyNumbers(this.nossoNumero), 11, 'right', '0') + padString( onlyNumbers(this.agencia), 4, 'right', '0') + padString( onlyNumbers(this.codCedente), 8, 'right', '0') + padString( this.carteira, 2, 'right', '0') this.strCodigoBarra = campo1 + dv1 + campo2 + campo3 return this.strCodigoBarra } this.setLinhaDigitavel = function () { throwError('Não é permitido alterar o valor da Linha Digitável do código de barras. Modifique os parâmetros e leia novamente a propriedade.') } this.getLinhaDigitavel = function () { var aux = this.codigoBarra var campo1 = aux.substr( 0, 3 ) + aux.substr( 3, 1 ) + aux.substr( 19, 5 ) campo1 += digito2a1Modulo10DeTrazPraFrente( campo1 ) var campo2 = aux.substr( 24, 10 ) campo2 += digito2a1Modulo10DeTrazPraFrente( campo2 ) var campo3 = aux.substr( 34, 10 ) campo3 += digito2a1Modulo10DeTrazPraFrente( campo3 ) var campo4 = digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11( campo1) var campo5 = aux.substr( 5, 14 ) this.strLinhaDigitavel = campo1.substr( 0, 5 ) + '.' + campo1.substr( 5, 5 ) + ' ' + campo2.substr( 0, 5 ) + '.' + campo2.substr( 5, 6 ) + ' ' + campo3.substr( 0, 5 ) + '.' + campo3.substr( 5, 6 ) + ' ' + campo4 + ' ' + campo5 return this.strLinhaDigitavel } this.parseLinhaDigitavel = function ( linhaDigitavel ) { if ( linhaDigitavel ) { this.banco = linhaDigitavel.substr( 0, 3 ) this.moeda = linhaDigitavel.substr( 3, 1 ) if ( linhaDigitavel.indexOf( '.' ) >= 0 ) { this.vencimento = this.dataBase + Number( linhaDigitavel.substr( 40, 4 )) this.valor = Number( linhaDigitavel.substr( 44, 10 )) / 100 } else { this.vencimento = this.dataBase + Number( linhaDigitavel.substr( 33, 4 )) this.valor = Number( linhaDigitavel.substr( 37, 10 )) / 100 } } } this.parseCodigoBarra = function ( codigoBarra ) { if ( codigoBarra ) { this.banco = codigoBarra.substr( 0, 3 ) this.moeda = codigoBarra.substr( 3, 1 ) this.vencimento = this.dataBase + Number( codigoBarra.substr( 5, 4 )) this.valor = Number( codigoBarra.substr( 9, 10 )) / 100 } } } // Função utilizada na validação de Código de Barras em Boleto Bancário function digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11ComZeroIgualUm( str ){ /* O cálculo do dígito verificador módulo 11 é feito da seguinte forma: os dígitos são multiplicados da direita para a esquerda pela seqüência de 2 a 9, ou seja, por 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, e assim por diante; os resultados do produto dos dígitos pelos valores da seqüência são somados; a soma é dividida por 11, e o resto da divisão é obtido; o dígito verificador é calculado subtraindo o resto de 11; quando o resto for igual a 0 o dígito verificador será igual a 1 */ str = str + '' var soma = 0 var peso = 2 for ( var i = str.length - 1; i >= 0; i -= 1 ){ soma += peso * Number( str.charAt(i) ) peso = ( peso == 9 ? 2 : peso + 1 ) } var resto = soma % 11 var digito = ( resto < 2 ? 1 : 11 - resto ) return digito.toString() } //Validações de Codigo de Barras de Boleto function validaCodigoBarrasBoleto( codigoBarra ){ //Banco Itaú function digitoVerificadorCodigoBarrasBoletoItau( codigoBarraSemDigito ) { return digito2a9Modulo11DeTrazPraFrenteSubtraidoDe11ComZeroIgualUm( codigoBarraSemDigito ) } if ( codigoBarra && codigoBarra.length == 44 ) { var codigoBarraSemDigito = codigoBarra.substr( 0, 4 ) + codigoBarra.substr( 5, 39 ) this.banco = codigoBarra.substr( 0, 3 ) if( this.banco == ( -1897131675 /* 341 */ ) ){ var digitoVerificador = digitoVerificadorCodigoBarrasBoletoItau( codigoBarraSemDigito ) } else { //Caso exista diferença na validação dos boletos por banco os demais bancos terão suas validações implementadas sob demanda var digitoVerificador = digitoVerificadorCodigoBarrasBoletoItau( codigoBarraSemDigito ) } return ( digitoVerificador == codigoBarra.substr( 4, 1 ) ) } else { return false } } //Validações de Linha Digitável de Boleto function validaLinhaDigitavelBoleto( linhaDigitavel ) { function validaLinhaDigitavelBoletoItau( linhaDigitavel ){ var campo1 = linhaDigitavel.substr( 0, 9 ) var dv1 = digito2a1Modulo10DeTrazPraFrente( campo1 ) var campo2 = linhaDigitavel.substr( 10, 10 ) var dv2 = digito2a1Modulo10DeTrazPraFrente( campo2 ) var campo3 = linhaDigitavel.substr( 21, 10 ) var dv3 = digito2a1Modulo10DeTrazPraFrente( campo3 ) return ( dv1 == linhaDigitavel.substr(9, 1) && dv2 == linhaDigitavel.substr( 20, 1 ) && dv3 == linhaDigitavel.substr( 31, 1 ) ) } linhaDigitavel = onlyNumbers( linhaDigitavel ) if( linhaDigitavel ) { this.banco = linhaDigitavel.substr( 0, 3 ) if( this.banco == ( -1897131675 /* 341 */ ) ){ return validaLinhaDigitavelBoletoItau( linhaDigitavel ) } else { //Caso exista diferença na validação dos boletos por banco os demais bancos terão suas validações implementadas sob demanda return validaLinhaDigitavelBoletoItau( linhaDigitavel ) } } else { return false } } function converteLinhaDigitavelEmCodigoBarras( linhaDigitavel ) { linhaDigitavel = onlyNumbers( linhaDigitavel ) return linhaDigitavel.substr( 0, 3 ) + // codigo do banco destino linhaDigitavel.substr( 3, 1 ) + // codigo da moeda linhaDigitavel.substr( 32, 1 ) + // Dv do código de barras padString( linhaDigitavel.substr( 33, 14 ), 14, 'left', '0') + // Valor codigo de barras linhaDigitavel.substr( 4, 5 ) + linhaDigitavel.substr( 10, 10 ) + linhaDigitavel.substr( 21, 10 ) // Campo livre codigo de barras } var _validateStringHandle if ( ! _validateStringHandle ){ _validateStringHandle = new Object() } // Obs: A assinatura do handle deve ser idêntica à assinatura do método validateString function _registerValidateStringHandler ( type, handle ){ _validateStringHandle[ type ] = handle } /* Início de registro de validateStringHandlers */ var _cpfCnpjValidateStringHandler = function ( value, type, max, min, caseType, classKey, dateFormat ){ var valueStr = value + '' if ( valueStr ){ var cpfCnpj = onlyNumbers( valueStr ) if ( cpfCnpjValido( cpfCnpj ) ){ // Garante a formatação correta if ( cpfCnpj.length == 11 ){ return cpfCnpj.substr( 0, 3 ) + '.' + cpfCnpj.substr( 3, 3 ) + '.' + cpfCnpj.substr( 6, 3 ) + '-' + cpfCnpj.substr( 9, 2 ) } else { return cpfCnpj.substr( 0, 2 ) + '.' + cpfCnpj.substr( 2, 3 ) + '.' + cpfCnpj.substr( 5, 3 ) + '/' + cpfCnpj.substr( 8, 4 ) + '-' + cpfCnpj.substr( 12, 2 ) } } else { throwError( 'O CPF ou CNPJ "' + valueStr + '" é inválido.' ) return false // remove firefox warning } } else { // Paulo. O framework e algumas interfaces antigas contam que o validateString // não gera erro se for informado "" return null } } _registerValidateStringHandler( 'cpfcnpj', _cpfCnpjValidateStringHandler ) _registerValidateStringHandler( 'cgccpf', _cpfCnpjValidateStringHandler ) _registerValidateStringHandler( 'pis', function ( value, type, max, min, caseType, classKey, dateFormat ){ var valueStr = value + '' if ( valueStr ){ var pis = onlyNumbers( valueStr) if ( pisValido( pis ) ){ // Garante a formatação correta return pis.substr( 0, 10) + '-' + pis.substr( 10, 1) } else { throwError( 'O PIS "' + valueStr + '" é inválido.' ) } } else { return null } } ) var _compBancoValidateStringHandler = function ( value, type, max, min, caseType, classKey, dateFormat ){ var valueStr = value + '' if ( valueStr ){ var s = onlyNumbers( valueStr) s = '000' + s.substr( 0, 3) return s.substr( s.length - 3) } else { return null } } _registerValidateStringHandler( 'comp', _compBancoValidateStringHandler ) _registerValidateStringHandler( 'banco', _compBancoValidateStringHandler ) _registerValidateStringHandler( 'agencia', function ( value, type, max, min, caseType, classKey, dateFormat ){ var valueStr = value + '' if ( valueStr ){ var s = onlyNumbers( valueStr) s = '0000' + s.substr( 0, 4) return s.substr( s.length - 4) } else { return null } } ) _registerValidateStringHandler( 'cheque', function ( value, type, max, min, caseType, classKey, dateFormat ){ var valueStr = value + '' if ( valueStr ){ var s = onlyNumbers( valueStr) s = '000000' + s.substr( 0, 6) return s.substr( s.length - 6) } else { return null } } ) /* Fim de registro de validateStringHandlers */