All pastes #90447 Raw Edit

msaraujo

public text v1 · immutable
#90447 ·published 2006-07-17 17:59 UTC
rendered paste body
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;
}