PHP_FUNCTION(cnpj) { char *cnpj = NULL; int argc = ZEND_NUM_ARGS(), cnpj_len; int cnpjnumero[14]; int sum = 0, i = 0; int rrpd = 0, rrsd = 0, pdv = 0, sdv = 0; if (zend_parse_parameters(argc TSRMLS_CC, "s", &cnpj, &cnpj_len) == FAILURE) return; for(i = 0; i < 12; i++) { cnpjnumero[i] = (int) cnpj[i] - 48; } sum = 5*cnpjnumero[0] + 4*cnpjnumero[1] + 3*cnpjnumero[2] + 2*cnpjnumero[3] + 9*cnpjnumero[4] + 8*cnpjnumero[5] + 7*cnpjnumero[6] + 6*cnpjnumero[7] + 5*cnpjnumero[8] + 4*cnpjnumero[9] + 3*cnpjnumero[10] + 2*cnpjnumero[11]; rrpd = sum % 11; pdv = rrpd < 2 ? 0 : 11 - rrpd ; sum = 0; cnpjnumero[12] = pdv; sum = 6*cnpjnumero[0] + 5*cnpjnumero[1] + 4*cnpjnumero[2] + 3*cnpjnumero[3] + 2*cnpjnumero[4] + 9*cnpjnumero[5] + 8*cnpjnumero[6] + 7*cnpjnumero[7] +6*cnpjnumero[8] + 5*cnpjnumero[9] + 4*cnpjnumero[10] + 3*cnpjnumero[11] + 2*cnpjnumero[12]; rrsd = sum % 11; sdv = rrsd < 2 ? 0 : 11 - rrsd; if( (pdv == (int) cnpj[12] - 48) && (sdv = (int) cnpj[13] - 48) ) { RETURN_TRUE; } else RETURN_FALSE; }