Sample code for 30+ languages & platforms
DataFlex

ScMinidriver - Change Smart Card PIN (or USB token PIN)

See more ScMinidriver Examples

Demonstrates how to change the PIN for a smart card or USB token.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoScmd
    String sReaderName
    String sCurrentPin
    String sNewPin
    Integer iRetval
    String sTemp1

    Move False To iSuccess

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    Get Create (RefClass(cComChilkatScMinidriver)) To hoScmd
    If (Not(IsComObjectCreated(hoScmd))) Begin
        Send CreateComObject of hoScmd
    End

    // Reader names (smart card readers or USB tokens) can be discovered
    // via List Readers or Find Smart Cards
    Move "Alcor Micro USB Smart Card Reader 0" To sReaderName
    Get ComAcquireContext Of hoScmd sReaderName To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoScmd To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // If successful, the name of the currently inserted smart card is available:
    Get ComCardName Of hoScmd To sTemp1
    Showln "Card name: " sTemp1

    // Change the "user" PIN.  (Typically, you'll always be using the "user" PIN.)
    Move "0000" To sCurrentPin
    Move "1234" To sNewPin
    Get ComPinChange Of hoScmd "user" sCurrentPin sNewPin To iRetval
    If (iRetval = -1) Begin
        Showln "The PIN is already blocked."
        Procedure_Return
    End

    If (iRetval = -2) Begin
        Showln "The PinChange function failed for some unanticipated reason"
        Get ComLastErrorText Of hoScmd To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    If (iRetval = 0) Begin
        Showln "PIN successfully changed."
    End
    Else Begin
        Showln "Current PIN is incorrect."
        Showln "Number of attempts remaining = " iRetval
    End

    Get ComDeleteContext Of hoScmd To iSuccess


End_Procedure