Method DC_ModEsp( c_Banco, mBSDG, mFGCB, mNMOG, lMult10 ) Class MR_Boleto
LOCAL mVLDG
LOCAL mSMMD
LOCAL mCTDG
LOCAL mSQMP
LOCAL mRSDV
LOCAL mDCMD := 0
IF c_Banco == "033" // Banespa
mSMMD := 0
mSQMP := 3
FOR mCTDG := 1 TO Len( mNMOG )
mVLDG := Val( SubStr( mNMOG,Len(mNMOG ) - mCTDG + 1,1 ) ) * ( mSQMP )
mSMMD += mVLDG - ( Int( mVLDG / 10 ) * 10 )
mSQMP := IF( mSQMP == 3, 7, IF( mSQMP == 7,9,IF(mSQMP == 9,1,3 ) ) )
NEXT
mRSDV := mSMMD - ( Int( mSMMD / 10 ) * 10 )
mDCMD := IF( mRSDV == 0, 0, 10 - mRSDV )
ENDIF
*
IF c_Banco == "756" // Sicoob
mSMMD := 0
mSQMP := 3
FOR mCTDG := 1 TO LEN(mNMOG)
mVLDG := VAL( SUBSTR( mNMOG , mCTDG, 1 ) ) * mSQMP
mSMMD += mVLDG
DO CASE
CASE mSQMP == 3 ; mSQMP := 1
CASE mSQMP == 1 ; mSQMP := 9
CASE mSQMP == 9 ; mSQMP := 7
CASE mSQMP == 7 ; mSQMP := 3
ENDCASE
NEXT
mRSDV := Int( Mod( mSMMD, 11) )
IF mRSDV == 0 .OR. mRSDV == 1
mDCMD := 0
ELSE
mDCMD := 11 - mRSDV
ENDIF
Endif
RETURN Str( mDCMD, 1 )