Sample code for 30+ languages & platforms
PureBasic

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 PureBasic Downloads

PureBasic
IncludeFile "CkScMinidriver.pb"

Procedure ChilkatExample()

    success.i = 0

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

    scmd.i = CkScMinidriver::ckCreate()
    If scmd.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Reader names (smart card readers or USB tokens) can be discovered
    ; via List Readers or Find Smart Cards
    readerName.s = "Alcor Micro USB Smart Card Reader 0"
    success = CkScMinidriver::ckAcquireContext(scmd,readerName)
    If success = 0
        Debug CkScMinidriver::ckLastErrorText(scmd)
        CkScMinidriver::ckDispose(scmd)
        ProcedureReturn
    EndIf

    ; If successful, the name of the currently inserted smart card is available:
    Debug "Card name: " + CkScMinidriver::ckCardName(scmd)

    ; Change the "user" PIN.  (Typically, you'll always be using the "user" PIN.)
    currentPin.s = "0000"
    newPin.s = "1234"
    retval.i = CkScMinidriver::ckPinChange(scmd,"user",currentPin,newPin)
    If retval = -1
        Debug "The PIN is already blocked."
        CkScMinidriver::ckDispose(scmd)
        ProcedureReturn
    EndIf

    If retval = -2
        Debug "The PinChange function failed for some unanticipated reason"
        Debug CkScMinidriver::ckLastErrorText(scmd)
        CkScMinidriver::ckDispose(scmd)
        ProcedureReturn
    EndIf

    If retval = 0
        Debug "PIN successfully changed."
    Else
        Debug "Current PIN is incorrect."
        Debug "Number of attempts remaining = " + Str(retval)
    EndIf

    CkScMinidriver::ckDeleteContext(scmd)


    CkScMinidriver::ckDispose(scmd)


    ProcedureReturn
EndProcedure